プロジェクト

全般

プロフィール

バグ #1285 » 0001-Filterstream-RT-quoted_status_permalink-3.patch

Izumi Tsutsui, 2019-03-12 00:53

差分を表示:

core/plugin/twitter/twitter.rb
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
(10-10/20)