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`
This commit is contained in:
parent
9d84b6e606
commit
35ec1c91e3
@ -72,6 +72,8 @@ class FetchLinkCardService < BaseService
|
|||||||
def attempt_oembed
|
def attempt_oembed
|
||||||
response = OEmbed::Providers.get(@url)
|
response = OEmbed::Providers.get(@url)
|
||||||
|
|
||||||
|
return false unless response.respond_to?(:type)
|
||||||
|
|
||||||
@card.type = response.type
|
@card.type = response.type
|
||||||
@card.title = response.respond_to?(:title) ? response.title : ''
|
@card.title = response.respond_to?(:title) ? response.title : ''
|
||||||
@card.author_name = response.respond_to?(:author_name) ? response.author_name : ''
|
@card.author_name = response.respond_to?(:author_name) ? response.author_name : ''
|
||||||
@ -113,7 +115,7 @@ class FetchLinkCardService < BaseService
|
|||||||
detector.strip_tags = true
|
detector.strip_tags = true
|
||||||
|
|
||||||
guess = detector.detect(html, response.charset)
|
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')
|
if meta_property(page, 'twitter:player')
|
||||||
@card.type = :video
|
@card.type = :video
|
||||||
|
Loading…
Reference in New Issue
Block a user