Twitter API でコメント付きリツイートする場合、特に専用のエンドポイントは用意されていないので、通常のツイートとして コメントとコメントを付けたいツイートの URL を status に入れて POST します。
それだけなら話は終わりですが、いざコードに組み込もうとすると、色んな疑問点が出てきました。いくつか検証したのでその結果と、その他お役立ち情報をまとめておきます。
TwitterOAuth を使ったサンプルコード
Twitter REST API の PHP ライブラリとしては最もポピュラーな TwitterOAuth を使ってコメント付きリツイートするコードです。
define('CONSUMER_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('CONSUMER_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('ACCESS_TOKEN', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('ACCESS_TOKEN_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); require 'twitteroauth/autoload.php'; use Abraham\TwitterOAuth\TwitterOAuth; $toa = new TwitterOAuth( CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET ); $tweet = $toa->post( 'statuses/update', array( 'status' => 'コメント https://twitter.com/xxxxxxxx/status/9999999999999999', 'trim_user' => true ) );
TwitterOAuth は使い方(というか初期化の方法)が最近になって変わったようで、グーグル先生が教えてくれる日本語情報は あまりあてになりません。2015年 6月現在は以下ですが、また変わるかも知れませんね。本家サイトでお確かめください。
require 'twitteroauth/autoload.php'; use Abraham\TwitterOAuth\TwitterOAuth;
コメント付きリツイートの元ツイートは quoted_status として返される
2015年 5月下旬くらいから、コメント付きリツイートを API で取得すると、quoted_status オブジェクトとして元ツイートが返されるようになりました。意外に知られていない(?)けど、これは便利。
コメント付きリツイートのもろもろ検証結果
コメント付きリツイートは、本文に元ツイートの URL(以下 便宜的に「ステータス リンク」と表記します)を含めるだけ、というシンプルなものなので、例えば スタータス リンクを 2つ含めたらどうなるの? とか、画像を添付したらどうなるの? などなど、疑問が沢山あったので実際に試してみました。
複数のステータス リンクをツイート
'status' => 'コメント https://twitter.com/xxxxxxxx/status/9999999999999999 https://twitter.com/xxxxxxxx/status/1111111111111111'
結果
» 最後のステータス リンクが quoted_status になる
ステータス リンクと画像リンクをツイート
画像リンクとは、画像付きツイートのステータス リンク末尾に「/photo/1」を付加したリンクです。画像リンクをツイートすると、タイムラインに画像が表示されます(.jpg などの画像ファイルへの直接リンクとは挙動が異なります)。
'status' => 'コメント https://twitter.com/xxxxxxxx/status/9999999999999999 https://twitter.com/xxxxxxxx/status/1111111111111111/photo/1'
結果
» 画像付きツイートになる(コメント付きリツイートにならない)
画像が優先されるのは注意点かも知れません。
ただし API でこのテスト ツイートを取得するとステータス リンクの quoted_status があります。また、API でアップロードした画像を media_urls で指定しても同じ結果でした。念のため、ステータス リンクと画像リンクの順序を変えても同じでした。
ステータス リンクと通常のリンクをツイート
'status' => 'コメント https://twitter.com/xxxxxxxx/status/9999999999999999 http://designhack.slashlab.net/'
結果
» コメント付きリツイートになる
尚、API でこのテスト ツイートを取得すると entities の urls はツイートに書いた順序のままであり、最後の url が元ツイートのステータス リンクではないので注意です。また、通常、ウェブ クライアントのタイムラインに表示されない元ツイートのステータス リンクが t.co の短縮 URL で表示されるのも通常のコメント付きリツイートと少し違う点です。
関連するお役立ちリンク
- Twitter Rest APIの全エンドポイント解説 (2015年版)
- REST APIs | Twitter Developers
- Error Codes & Responses | Twitter Developers
- Twitter Help Center | Automation rules and best practices
最初にリンクした Syncer さんは超素晴らしい記事ですね。お陰様でだいぶ捗りました。ありがとうございます。
最後にリンクしたのは Twitter 公式の自動化ガイドライン。
Twitter API を使うなんて、何かを自動化して楽したい効率化する以外にないでしょう。「自動フォローに限らず、自動フォローバックも禁止だって? ソースはどこだ。探しに行くつもりはない。ソースを出さない限り絶対に信じないぞ!」という筆者の脳内に生息する魔物に見て欲しい。
Automated following and unfollowing
You may not use or develop any application that allows for the following or unfollowing of user accounts in a bulk or automated manner. Using block as a means to unfollow users is also not allowed. Accounts and applications that engage in this practice will be suspended.
(意訳)
自動でフォローしたりアンフォローするとアカウントやアプリを凍結するよ。
最後はちょっとブレちゃったけど気にしない。では また次回。