하테나 북마크의 파멸적 인기 댓글 표시

무엇이 있었는지



Hatena 북마크는 코멘트 표시 개선의 일환으로 Yahoo! 억제하려는 노력을 시작했습니다.

사실, 공식 발표가 알려지기 전에 AnonymousDiary라는 서비스로 화제가 되어, 싸움 소문의 소란이 되었습니다.

엄청난 마스다 시민으로서는, 구래의 파멸적 코멘트 순위를 바란다.

파이썬으로 해결



google의 colab에서 일했습니다.
  • 기사의 정보를 API로 입수
  • 기사 json으로부터 부쿠마 한 각 유저의 「코멘트 정보의 URI」를 생성한다
  • 스타 취득 API로 코멘트 URI를 지정해, 스타수를 산출
  • 각 코멘트의 스타 수를 내고 상위 10 개를 표시

  • 후술하는 json의 개요를 보면 이미지가 붙기 쉬울지도 모릅니다.
    import json, re
    import urllib.request, urllib.parse
    
    '''
    記事のjsonを取得。
    '''
    def getEntry(targetUrl):
      encodedUrl = urllib.parse.quote(targetUrl) # 記号を%でエスケープするやつ
      apiUrl = 'https://b.hatena.ne.jp/entry/jsonlite/?url=' + encodedUrl
      req = urllib.request.Request(apiUrl, method='GET')
      with urllib.request.urlopen(req) as res:
        return json.loads(res.read()) # 辞書型が返ってくるはず
    
    # 2021/07/19 23:29 => 20210719
    def makeDate(timestampString):
      m = re.match("^([0-9]+)/([0-9]+)/([0-9]+)" , timestampString)
      return "".join(m.groups())
    
    '''
    コメント情報を取得する。コメントに付いたスター情報を含む。
    # bookmark: エントリー情報中の"bookmarks"
    # template: ユーザIDとブクマ日(YYYYMMDD)が抜けたテンプレ
    '''
    def getComment(bookmark, template):
      # コメントのURIを生成する
      userId = bookmark['user']
      date = makeDate(bookmark['timestamp'])
      target = urllib.parse.quote(template.format(userId, date))
      # はてなスター取得API
      apiUrl = 'https://s.hatena.com/entry.json?uri=' + target
      req = urllib.request.Request(apiUrl, method='GET')
      with urllib.request.urlopen(req) as res:
        return json.loads(res.read())
    
    ''' 
    試す
    '''
    # 「 https://b.hatena.ne.jp/{ユーザーID}/{コメントの日付(YYYYMMDD)}#bookmark-{エントリーID} 」
    entry = getEntry('https://anond.hatelabo.jp/20210719114552') # 冒頭の記事を例にする
    template = "https://b.hatena.ne.jp/{0}/{1}#bookmark-" + entry['eid']
    
    # 同期処理なので、コメント数と比例して時間がかかる。(おそらく)
    comments = []
    for bookmark in entry['bookmarks']:
      if(not bookmark['comment']): # コメントが無いブクマは無視。通信を伴う同期処理で遅いので。
        continue
      comment = getComment(bookmark, template)
      if(len(comment['entries']) < 1):
        continue
      star = len(comment['entries'][0]['stars'])
      comments.append((bookmark['user'], bookmark['comment'], star)) # ("yourname", "it's a comment.", 5)
    
    goodComments = sorted(comments, key=lambda x:x[2], reverse=True)[0:9]
    print(goodComments)
    

    메모



    API 정보



  • http://s.hatena.com/entry.json?uri={ブコメのパーマリンク} 에서 스타 수를 가져옵니다.
  • 단, 코멘트는 http://b.hatena.ne.jp/{ユーザーID}/{コメントの日付(YYYYMMDD)}#bookmark-{エントリーID} 를 지정한다.

  • entry의 json


      {
        ...
        "bookmarks": [
          {
            "user": "editor_t",
            "tags": [],
            "comment": "",
            "timestamp": "2021/07/19 23:36"
          },
          {
            "timestamp": "2021/07/19 23:35",
            "comment": "",
            "user": "Ta-nishi",
            "tags": []
          }, ...
        ],
        "eid": "4705668973035540098"
      }
    

    코멘트 json


      {
        "entries": [
          {
            "stars": [
              {
                "quote": "",
                "name": "korok_kuma3"
              },
              {
                "name": "kako-jun",
                "quote": ""
              }, ...
            ], 
            "can_comment": 0
          }
        ],
        "can_comment": 0
      }
    

    참고 URL



  • htps: //synse r. jp/하부-아피 정리 API 정보. 2015년의 정보이지만, 잘 정리하고 있다.

  • ぇぇぺぺr. 하테나. 네. jp / 자 / 도쿠 멘 ts / 보오 kma rk / 아피 s / 게 친후 기사의 정보를 가져오는 API.

  • ぇぇぺぺr. 하테나. 네. jp / 자 / 도쿠 멘 ts / s r / 아피 s / 엔 try 스타 수 취득에 관한 API.

  • htps //w w. 이츠키 유 2. 네 t / 엔 트리 / 아세트 s - t t l CORS에 문제가 있으며 js에서는 완료되지 않습니다.

  • 면책



    이것이 스팸이라고 하면 규약 위반이므로, 해서는 안 된다.
    ぇぇぺぺr. 하테나. 네. jp / 센세

    그건 그렇고



    htps // // 논 d. 글쎄. jp/20210719114552
    의 2021/07/20 03:58 시점에서의 북마크↓
    htps // b. 하테나. 네. jp / 엔트리 / s / 아논 d. 글쎄. jp/20210719114552

    「진짜」인기 코멘트가 이쪽. (뭔가 잘못되어 9개밖에 표시되지 않았습니다.)
    1. 320 ('mayumayu_nimolove', '人生で一番スターもらった/素晴らしいニュースをありがとうございます。増田さんの意見に同意です。私も職業柄興味があり、ここ数年間追い求めてまさに増田さんのおかげで解決しました。ありがとうござい増田。')
    2. 157 ('usomegane', 'これには反対だわ。スター工作対策までは許容できたけど、コメントの内容の良し悪しはブクマカ間の相互批判や議論でユーザーが判断するべき。')
    3. 127 ('unticrice', '人気コメントじゃなくて「人工知能による建設的な気配がするコメント」、略して人気コメントじゃねーか!')
    4. 121 ('x100jp', 'さっき人気コメに載ってなかったという事は、非建設的ブコメと認定されたのか。僕は悲しい。(非建設的ブコメ)/\u3000文字数が必要な気がする。梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅')
    5. 114 ('muchonov', 'こういうAIによる緩いモデレーション制御は、誹謗中傷や集団極性化の問題へのひとつの回答だと思うけど、そうやって「非建設的」コメントを排除したものを人気コメント一覧と呼ぶのが適切かどうかはまた別の議論')
    6. 108 ('vlxst1224', 'まじだ何か注意書きが現れやがったぞ。スターを集められるかどうかは分からないが弾かれるか試してみるか。う●こ') 
    7. 097 ('madooka', 'はてブの人気コメントの問題は、非建設的だからではなく攻撃性が高いからでは。薄目で見ると建設的であろうとはしている気がする') 
    8. 076 ('AQM', '定礎/(追記)アーキテクト アース付きコンセント アームチェア アーリーアメリカンスタイル アール・ヌーボー 相決り アイランドキッチン 青色申告 赤さび 赤身 アカンサス アクリル板 アコーディオンドア 足場 足元灯')
    9. 073 ('daydollarbotch', '鹿島しいコメントのテンションが竹ー中で、人力で選別するのもキャパ大林、も清水にスターを付ける人がいても分からない。大成を制する良いブコメをAIが選んでほしい。根拠はこちら http://ja.wikipedia.org/w/index.php?curid=57752')
    

    그리고, 「건설적인」코멘트가 이쪽. (이쪽도 9개까지 준비했습니다.)
    순위와 표시 순서가 일치하는 전제입니다. 스타 수가 망가졌지만 신경 쓰지 않습니다.
    1. 16856 ('mayumayu_nimolove', '人生で一番スターもらった/素晴らしいニュースをありがとうございます。増田さんの意見に同意です。私も職業柄興味があり、ここ数年間追い求めてまさに増田さんのおかげで解決しました。ありがとうござい増田。')
    2. 155 ('usomegane', 'これには反対だわ。スター工作対策までは許容できたけど、コメントの内容の良し悪しはブクマカ間の相互批判や議論でユーザーが判断するべき。')
    3. 316 ('x100jp', 'さっき人気コメに載ってなかったという事は、非建設的ブコメと認定されたのか。僕は悲しい。(非建設的ブコメ)/\u3000文字数が必要な気がする。梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅梅')
    4. 112 ('muchonov', 'こういうAIによる緩いモデレーション制御は、誹謗中傷や集団極性化の問題へのひとつの回答だと思うけど、そうやって「非建設的」コメントを排除したものを人気コメント一覧と呼ぶのが適切かどうかはまた別の議論')
    5. 095 ('madooka', 'はてブの人気コメントの問題は、非建設的だからではなく攻撃性が高いからでは。薄目で見ると建設的であろうとはしている気がする') 
    6. 106 ('vlxst1224', 'まじだ何か注意書きが現れやがったぞ。スターを集められるかどうかは分からないが弾かれるか試してみるか。う●こ') 
    7. 071 ('daydollarbotch', '鹿島しいコメントのテンションが竹ー中で、人力で選別するのもキャパ大林、も清水にスターを付ける人がいても分からない。大成を制する良いブコメをAIが選んでほしい。根拠はこちら http://ja.wikipedia.org/w/index.php?curid=57752')
    8. 062 ('srgy', '大喜利勢にとっての冬の時代到来…? / (追記)「ルックバック」のブクマ数1793時点でのBingキャッシュ https://archive.vn/tzXlA 現在の同エントリの「人気コメント」は、ここから3つ排除されてる…')
    9. 076 ('AQM', '定礎/(追記)アーキテクト アース付きコンセント アームチェア アーリーアメリカンスタイル アール・ヌーボー 相決り アイランドキッチン 青色申告 赤さび 赤身 アカンサス アクリル板 アコーディオンドア 足場 足元灯')
    

    깨끗하게 내 댓글 만 제외됩니다.



    하테나산...왜...

    그것이 "하테나"라는 것입니까?


    .
    .
    .
    하지만 확실히 주저하지 않았기 때문에 알고리즘은 올바르게 움직이고 있네요.
    해보고 생각했는데, 비교해도 괜찮네요.

    좋은 웹페이지 즐겨찾기