335 |
335 |
# Twitter Entity情報を元にScoreをあれする
|
336 |
336 |
filter_score_filter do |message, note, yielder|
|
337 |
337 |
if message == note && %i<twitter_tweet twitter_direct_message>.include?(message.class.slug)
|
338 |
|
score = score_by_entity(message) + extended_entity_media(message)
|
|
338 |
score = score_by_entity(message) + quoted_status_permalink(message) + extended_entity_media(message)
|
339 |
339 |
if !score.all?{|n| n.class.slug == :score_text }
|
340 |
340 |
yielder << score
|
341 |
341 |
end
|
... | ... | |
398 |
398 |
score
|
399 |
399 |
end
|
400 |
400 |
|
|
401 |
# filterstream では引用RTの URLが本文に付与されないので quoted_status_permalink から取り出す
|
|
402 |
def quoted_status_permalink(tweet)
|
|
403 |
score = Array.new
|
|
404 |
permalink = (tweet[:quoted_status_permalink] rescue nil)
|
|
405 |
if permalink
|
|
406 |
uri = Diva::URI.new(permalink[:expanded] || permalink[:url])
|
|
407 |
uri.freeze
|
|
408 |
result = Diva::Model(:score_hyperlink).new(
|
|
409 |
description: permalink[:display] || permalink[:expanded] || permalink[:url],
|
|
410 |
uri: uri)
|
|
411 |
# filterstream で流れてくる tweet は以下のようになっているっぽい refs #1285
|
|
412 |
# 1. ツイート本文が US-ASCII かつ 140文字以下で filterstream 受信した場合
|
|
413 |
# * text あり full_text なし text は引用RTのURLを 含まない
|
|
414 |
# * entities の urls に引用RTのURLを 含まない (urls は空)
|
|
415 |
# 2. ツイート本文が UTF-8 もしくは 140文字超で filterstream 受信した場合
|
|
416 |
# * text なし full_text あり full_text は引用RTのURLを 含まない
|
|
417 |
# * entities の urls に引用RTのURLを 含まない (urls は空)
|
|
418 |
# ……と思っていたら次のような例外が発覚したので個別に対処
|
|
419 |
# 3. ツイート本文が UTF-8 かつ 140文字以下で filterstream 受信した場合で
|
|
420 |
# 投稿クライアントが Janetter Pro for Android の場合
|
|
421 |
# * text あり full_text なし text は引用RTのURLを 含む
|
|
422 |
# * entities の urls に引用RTのURLを 含む
|
|
423 |
text = (tweet[:text] rescue nil)
|
|
424 |
text_url = text && text.include?(permalink[:url])
|
|
425 |
full_text = (tweet[:full_text] rescue nil)
|
|
426 |
full_text_url = full_text && full_text.include?(permalink[:url])
|
|
427 |
if !text_url && !full_text_url
|
|
428 |
score << text_note(description: ' ')
|
|
429 |
score << result
|
|
430 |
end
|
|
431 |
end
|
|
432 |
score
|
|
433 |
end
|
|
434 |
|
401 |
435 |
def extended_entity_media(tweet)
|
402 |
436 |
extended_entities = (tweet[:extended_entities][:media] rescue nil)
|
403 |
437 |
if extended_entities
|