Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ニコニコ動画の動画にコメントを投稿する

More than 3 years have passed since last update.

はじめに

ニコニコ動画は知らないうちに仕様変更されてることが多いので、この情報通りにやっても動かなくなっているかもれません。
その時は公式のプレイヤーの挙動をチェックしてください。

一般ユーザー(非プレミアムユーザー)でしか試していないので、ゲストユーザーやプレミアムユーザーでは正しく動かないかも知れません。

他のユーザーやニコニコ動画に迷惑になるようなコメント投稿テストやコメントの連投などはしないように気をつけましょう。

コメント投稿までの流れ

  1. 動画情報取得
  2. コメントのスレッドキーを取得
  3. コメントリストを取得
  4. コメントの送信準備(PostKeyの取得)
  5. コメントの送信

コメントリストの取得までは別に挙げてる記事があるのでそちらを参考にしてください。

ここでは太字で示した「PostKeyの取得」+「コメントの送信」の2つを説明します。

PostKeyの取得

PostKeyは動画のコメントスレッドのIDになります。
動画のコメントスレッドは100コメントごとに1ブロックに区切られているようです。

PostKeyを取得するには、ユーザーがログインしているセッション下で以下のクエリーをGETで送信します。

http://flapi.nicovideo.jp/api/getpostkey/?version=1&yugi=&device=1&block_no={BlockNo}&thread={ThreadID}&version_sub=2
  • {BlockNo} = 最新のコメント数/100(切り捨て、0始まり)
  • {ThreadId} = コメントリスト.thread.thread

なお、具体的に試行していませんが、version、version_sub、yugi、deviceのいずれかが欠けると正しいPostKeyが取得できないようです。(ネットの参考記事をそのまま試して失敗した方はこれに引っかかってるかも)


レスポンスは以下の文字列です

postkey=.dMQ..vMToy.~1~FYEPVYJVBbMtFQWJWaqfUVBTGCaKanccVtZqjQ8wl4g

"postkey="以降の文字列がPostKey文字列です。ドットなどの記号もPostKey文字列に含まれます。

先頭8文字を切り捨てるだけでPostKey文字列に変換できます。

コメントの送信

コメントを投稿するための送信先URLはコメントリストを取得したときと同じ、動画情報のms属性が示すURLを指定します。

以下の内容をPOSTします。

<chat thread="{ThreadId}" 
      ticket="{Ticket}" 
      user_id="{UserId}" 
      vpos="{VideoPosition}" 
      mail="{Commands}" 
      postkey=".dMQ..vMToy.~1~FYEPVYJVBbMtFQWJWaqfUVBTGCaKanccVtZqjQ8wl4g" 
      premium="{Authority}"
     >
     {CommentText}
</chat>

{ThreadId} = コメントリスト.thread.thread
{Ticket} = コメントリスト.thread.ticket (ex: 0x81bd50cf)
{UserId} = ユーザーID
{VideoPosition} = 10ミリ秒単位の動画時間
{Commands} = mailとあるけどコメントのコマンド (半角空白区切り)(詳細は割愛)
{Authority} = 0...一般ユーザー 1...プレミアムユーザー
{CommentText} = コメント本文

一般ユーザーの場合はpremium属性は省略できます。
Ticketはコメントリストのthread属性内にあります。


レスポンスは…

<packet>
    <chat_result thread="" status="0" no="765"></chat_result>
</packet>

noはコメント番号です。コメント投稿失敗時には最新のコメント数が入ります。

chat_result.statusの詳細

0 = SUCCESS(投稿完了)
1 = FAILURE(投稿拒否)
2 = INVALID_THREAD(スレッドIDがおかしい)
3 = INVALID_TICKET(投稿チケットが違う)
4 = INVALID_POSTKEY(ポストキーがおかしい or ユーザーIDがおかしい)
5 = LOCKED(コメントはブロックされている)
6 = READONLY(コメントは書き込めない)
8 = TOO_LONG(コメント内容が長すぎる)

引用元:http://blog.livedoor.jp/neko_mk5/archives/1004749981.html

補足

  • コミュニティおよびチャンネルの動画は184コマンドのついたコメントはNG

参考記事

・ニコニコ動画のコメント表示の仕様
http://qa.nicovideo.jp/faq/show/923

・ニコニコAPI コメント関連備忘録 ファイナル
http://blog.livedoor.jp/mgpn/archives/51968685.html

・ニコニコのコメントの形式メモ
http://blog.livedoor.jp/neko_mk5/archives/1004749981.html

tor4kichi
シンプルで"使える"アプリを作ろう
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away