diff options
author | unarist <m.unarist@gmail.com> | 2017-10-12 19:01:32 +0900 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-10-12 12:01:32 +0200 |
commit | 35ec1c91e3035b6d9f8998b693ff9829f101d752 (patch) | |
tree | 5b662c5691408e1f9a61b09188a96d7df0b28f47 | |
parent | 9d84b6e6062db19552e171c61b2647b99834d2f7 (diff) |
Fix some failure cases on FetchLinkCardService (#5347)
* If OEmbed response doesn't have a required property `type`, ignore it. e.g. `NoMethodError: undefined method 'type' for ...` * If we failed to detect encoding, fallback to default behavior of Nokogiri. e.g. `KeyError: key not found: :encoding`
-rw-r--r-- | app/services/fetch_link_card_service.rb | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb index cf3d78683..7029c4d75 100644 --- a/app/services/fetch_link_card_service.rb +++ b/app/services/fetch_link_card_service.rb @@ -72,6 +72,8 @@ class FetchLinkCardService < BaseService def attempt_oembed response = OEmbed::Providers.get(@url) + return false unless response.respond_to?(:type) + @card.type = response.type @card.title = response.respond_to?(:title) ? response.title : '' @card.author_name = response.respond_to?(:author_name) ? response.author_name : '' @@ -113,7 +115,7 @@ class FetchLinkCardService < BaseService detector.strip_tags = true guess = detector.detect(html, response.charset) - page = Nokogiri::HTML(html, nil, guess&.fetch(:encoding)) + page = Nokogiri::HTML(html, nil, guess&.fetch(:encoding, nil)) if meta_property(page, 'twitter:player') @card.type = :video |