RubyMoney / google_currency

Ruby Money::Bank interface for the Google Currency exchange data
http://rubymoney.github.com/google_currency
MIT License
182 stars 90 forks source link

Occasional `OpenURI::HTTPError: 404 Not Found` starting ~3/9/2018 #65

Closed xinranxiao closed 3 years ago

xinranxiao commented 6 years ago

Has anyone else been getting occasional OpenURI::HTTPError: 404 Not Found errors when trying to fetch rates?

open-uri.rb" line 363 in open_http
open-uri.rb" line 741 in buffer_open
open-uri.rb" line 212 in block in open_loop
open-uri.rb" line 210 in catch
open-uri.rb" line 210 in open_loop
open-uri.rb" line 151 in open_uri
open-uri.rb" line 721 in open
open-uri.rb" line 729 in read
gems/google_currency-3.4.0/lib/money/bank/google_currency.rb" line 133 in fetch_rate

Ruby: 2.4.3 Example URL that it tries to hit: http://finance.google.com/finance/converter?a=1&from=USD&to=EUR

I can't seem to deterministically reproduce this... has anyone else been running into this recently?

jirihradil commented 6 years ago

The same for me. Started yesterday (3/12/2018) and occurs occasionally for different currencies converted to USD (AUD, MAD, KES). When repeating, it's OK. Guess something to do with the Google's endpoint?

jirihradil commented 6 years ago

Full stack:

Monetize.from_string(BigDecimal.new('100'), 'KWD').as_us_dollar.to_s

OpenURI::HTTPError: 404 Not Found
    from /home/ec2-user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/open-uri.rb:358:in `open_http'
    from /home/ec2-user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/open-uri.rb:736:in `buffer_open'
    from /home/ec2-user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/open-uri.rb:211:in `block in open_loop'
    from /home/ec2-user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/open-uri.rb:209:in `catch'
    from /home/ec2-user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/open-uri.rb:209:in `open_loop'
    from /home/ec2-user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/open-uri.rb:150:in `open_uri'
    from /home/ec2-user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/open-uri.rb:716:in `open'
    from /home/ec2-user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/open-uri.rb:724:in `read'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/bundler/gems/google_currency-fa6e8ba366c0/lib/money/bank/google_currency.rb:133:in `fetch_rate'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/bundler/gems/google_currency-fa6e8ba366c0/lib/money/bank/google_currency.rb:103:in `get_rate'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/money-6.10.1/lib/money/bank/variable_exchange.rb:110:in `exchange_with'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/money-6.10.1/lib/money/money.rb:436:in `exchange_to'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/money-6.10.1/lib/money/money.rb:449:in `as_us_dollar'
    from (irb):8
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/railties-5.0.4/lib/rails/commands/console.rb:65:in `start'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/railties-5.0.4/lib/rails/commands/console_helper.rb:9:in `start'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:78:in `console'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
    from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/railties-5.0.4/lib/rails/commands.rb:18:in `<top (required)>'
    from bin/rails:9:in `require'
    from bin/rails:9:in `<main>'
adrianwantsa commented 6 years ago

+1

jirihradil commented 6 years ago

I did a prefetch of all currencies as a workaround in Ruby. If it throws 404, I repeat it as long as it fails. Also changed ttl to 30 days:

Money::Bank::GoogleCurrency.ttl_in_seconds = 2592000 # 30 days

GOOGLE_UNSUPPORTED_CURRENCIES = ["BYR", "GGP", "IMP", "IRR", "JEP", "PRB", "MNK", "RMB", "TVD", "SSP", "STD", "VEF", "VND", "ZMK", "ZWD"];

ISO4217::Currency.currencies.keys.sort.each {|c| p c; next if GOOGLE_UNSUPPORTED_CURRENCIES.include?(c); p Monetize.from_string(BigDecimal.new('100'), c).as_us_dollar.to_s; sleep 1; }
jirihradil commented 6 years ago

Errors are increasing. Is the endpoint going to die? Guess that's not very probable that Google has unstable finance converter for couple of days.

jirihradil commented 6 years ago

Error rate is still increasing. Moved to https://github.com/spk/money-open-exchange-rates which uses a different endpoint. Works flawlessly.

adrianwantsa commented 6 years ago

I haven't seen the error for 24 hours. But also have https://github.com/spk/money-open-exchange-rates ready to go, if need be.

dmcwilliams commented 6 years ago

I have seen several errors this morning so I've begun looking into https://github.com/spk/money-open-exchange-rates

antstorm commented 6 years ago

Yeah, it looks like Google is winding down their exchange rates page. I'm getting occasional redirects to "Finance" section of google search.

jirihradil commented 6 years ago

Just FYI - using https://github.com/spk/money-open-exchange-rates for 2 days instead of this gem and can say it's a good successor. Good speed to you, google_currency, served us well for 7 years, thank you and thanks all the contributors!

Paludis commented 6 years ago

Having the same issue, will check out https://github.com/spk/money-open-exchange-rates

lukaVarga commented 6 years ago

It looks like it is constantly redirecting to the google search page now..

edlebert commented 6 years ago

I just created another gem that uses openexchangerates.org: https://github.com/edlebert/money-oxr

antstorm commented 6 years ago

@edlebert just curious why did you decide to build another gem instead of improving the existing one?

edlebert commented 6 years ago

@antstorm Other than getting the rates from the same source, the gems are pretty different. First and foremost I need a useful and reliable bank, so the easiest option was just to create another option.

Paludis commented 6 years ago

@edlebert thank you, looks great!

sbleon commented 6 years ago

https://github.com/edlebert/money-oxr is working well for me to. Thanks, @edlebert !

It seems like money-oxr will do conversions from any currency to any currency, even on the https://openexchangerates.org free plan. I had thought I was going to have to sign up for a paid account or write my own "convert X to Y via USD" routine, but the gem is pretty-much a drop-in replacement for google_currency, with just a touch of configuration required.

antstorm commented 6 years ago

@edlebert makes sense, but I'd advice to focus the effort rather than diluting it if possible

edlebert commented 6 years ago

@antstorm I understand, but in some cases, the author isn't willing to take their project in the direction you want, which is the case here. Thanks again for this awesome gem, and I hope we can all continue to enjoy free and easy currency-exchanges for years to come :)

spk commented 6 years ago

Hello, if you where talking about money-open-exchange-rates @edlebert, I don't see any pull requests or issues where I was not willing to accept improvement or direction changes, cheers

edlebert commented 6 years ago

@spk I don't mean any disrespect. I never said you were unwilling to accept improvement. You're very friendly and willing to accept PRs, etc. Several of the Issues in money-open-exchange-rates have expressed confusion surrounding caching/TTL/auto-refresh. Your response has always been for users to set up cron or heroku scheduler tasks to manage auto-refresh and re-writing the cache (I'm not linking them all here). That's a totally valid design decision, and it's one you're obviously comfortable with keeping. For myself, I wanted something similar to google_currency.

Also, no offense to anyone, but I'm not going to respond to any more "why" questions here about money-oxr here. Feel free to open an issue or PR, or contact me directly (can you even do that on github?)

spk commented 6 years ago

Thanks for your reply @edlebert, I did not feel any disrespect but I just wanted to said that I'm not against change and I'm always glad to have feedback on projects, the issues are here https://github.com/spk/money-open-exchange-rates/issues/37 and https://github.com/spk/money-open-exchange-rates/issues/38; cheers

ThinkAndRun commented 6 years ago

I've added PR to fix it: https://github.com/RubyMoney/google_currency/pull/71

antstorm commented 6 years ago

Just pushed a new version with updated URL — 3.4.1. Would appreciate if people who still use it could update it and tell me if it works consistently.

Also thanks to @ThinkAndRun for submitting the fix.

Onikoroshi commented 6 years ago

@antstorm : Is there a fix for those of us using your money-rails gem ( https://github.com/antstorm/money-rails )? I ran bundle update money-rails and am still getting the Money::Bank::GoogleCurrencyFetchError: Money::Bank::GoogleCurrencyFetchError error. :/

antstorm commented 6 years ago

@Onikoroshi you should bundle update google_currency instead, since it's not a dependency of money-rails or money. It should be a separate entry in your Gemfile.

Onikoroshi commented 6 years ago

@antstorm : Aha, that was it! Thank you so much for taking time to answer, even though it was a bit off-topic. I really appreciate it!

antstorm commented 6 years ago

@Onikoroshi no problem, glad that it works now

apuente93 commented 6 years ago

This is still causing issues OpenURI::HTTPError: 404 Not Found

kissrobber commented 6 years ago

I got 404 errors today and 5days ago

antstorm commented 6 years ago

@apuente93 @kissrobber This is caused by network conditions, instability of google's API (looks like it's not really supported). If you are still using this gem I'd suggest putting some retry logic around the call.

bretweinraub commented 6 years ago

http://finance.google.com/finance/converter?a=1&from=USD&to=EUR

image

wikiti commented 6 years ago

Looks like the current path (/bctzjpnsun/converter) is throwing 404 errors:

https://finance.google.com/bctzjpnsun/converter?a=1&from=USD&to=EUR

bretweinraub commented 6 years ago

I threw in the towel on Google Finance and have hacked together something simple using fixer.io.

CarlosIgnacioGo commented 6 years ago

OpenURI::HTTPError: 404 Not Found

apuente93 commented 6 years ago

Thanks for the reply. I suggest moving to https://github.com/spk/money-open-exchange-rates. Works like a charm without this error.

antstorm commented 6 years ago

Have a look at https://github.com/RubyMoney/money#implementations for a list of alternatives as the Google converter is getting really unstable

antprt commented 6 years ago

Is mainteined the gem?

From the last 15 days I have the same error: OpenURI::HTTPError: 404 Not Found

antstorm commented 6 years ago

@antprt I suggest you getting yourself familiar with the thread before posting nonsense

absyah commented 6 years ago

Today status: OpenURI::HTTPError: 404 Not Found

antstorm commented 6 years ago

@absyah thanks for reporting.

I've updated the README with a warning of this issue — https://github.com/RubyMoney/google_currency#warning

ravindra9278 commented 4 years ago

Still Getting 404 Error

> bank = Money::Bank::GoogleCurrency.new
> bank.get_rate(:GBP, :USD).to_f

> Traceback (most recent call last):
        1: from (irb):15
OpenURI::HTTPError (404 Not Found)
joshuapinter commented 3 years ago

Just wanted to add to here. We ended up replacing google_currency with eu_central_bank and it was very easy and worked great. It's part of RubyMoney so it should be well maintained. Basic replacement looks like this:

eu_central_bank = EuCentralBank.new

eu_central_bank.update_rates # TODO: Make this use a cache in a shared directory and just update it every day.

Money.default_bank = eu_central_bank

Definitely a good option to consider.