[twitter]DM投稿が10000文字まで投稿できる[dm]

おつかれさまんさ

REST APIでも140文字を越える投稿が出来るように2015年7月中になっていたようで・・・

https://dev.twitter.com/rest/reference/post/direct_messages/new

こちらのパラメータのtextを呼んでも140文字以下でよろ~となっているんですが、以下のリンク先のREST APIを実行すると「”dm_text_character_limit”: 10000,」というのが出てくるではありませんか、、、

https://dev.twitter.com/rest/reference/get/help/configuration

ということで実際に140文字を越える文字数を投稿してみたところいけるようになっているのを確認できました。

スポンサーリンク

[メモ]twitterのDMで140文字以上ある内容を取得する[memo]

おひさしぶりでっす

現在公式からDMを送る際に140文字の制限がなくなっています。
コレを普通にREST APIを使用しデータの取得を行うと140文字で切れてしまいます。

以下のREST APIを使用する際に「full_text=true」をパラメータに追加することでメッセージを全部取得できるようになります。
direct_messages
direct_messages/sent
direct_messages/show

因みに、stream apiでは何もしなくても、140文字以上の文字を取得できます。

スポンサーリンク

[メモ]REST API で取得したDM画像の表示方法[twitter]

ご無沙汰でっす

以下のようにすればいいだけです。
※バイナリーデータが得られます。

curl –get ‘DMの画像のURL’ –header ‘Authorization: OAuth oauth_consumer_key=”OAUTH_CONSUMER_LEY”, oauth_nonce=”OAUTH_NONCE”, oauth_signature=”OAUTH_SIGNATURE”, oauth_signature_method=”HMAC-SHA1″, oauth_timestamp=”実行時の秒”, oauth_token=”OAUTH_TOKEN”, oauth_version=”1.0″‘

このoauthでレスポンスヘッダーには、APIのlimitが書かれていませんでした。
なので、何度でもできそうな感じですが・・・

何回か連続で試していると、データの取得ができなくなってしまいました・・・
orz

スポンサーリンク

[メモ]twitter REST API による動画付きツイートの仕方[動画]

おはこんばんちは
ご無沙汰しております。

twitterで動画のツイートを見かけてはや数か月・・・
APIで投稿はできないのかなぁ~と久しぶりにAPIのドキュメントを眺めてみました。

とりあえず、項目としてvideoの投稿ができるようになったというのを見つけて実際に動画投稿を行ってみました。
以下のアドレスで投稿の仕方とか、動画の形式とかサイズとか書かれているので見てみてください。

https://dev.twitter.com/rest/reference/post/media/upload-chunked
https://dev.twitter.com/rest/public/uploading-media

見るの面倒な人用に以下

動画形式 mp4
動画の容量 最大15MB
アスペクト比 1:3~3:1
※twitterの公式アプリではたぶん640×640
動画の時間 0.5~30秒
Video Bitrate 2048K 1280×780の場合
Audio Bitrate 128K 1280×780の場合
//エンドポイント
$url = 'https://upload.twitter.com/1.1/media/upload.json';

1.INIT postするデータのファイルサイズを送りそのidを取得

//動画ファイル
$video_file = "/tmp/test.mp4";
//投稿データ command、media_type、total_bytes
$post_data = array(
  'command'=>'INIT',
  'media_type' => 'video/mp4',//動画の場合video/mp4固定(mp4のみ対応の為)
  'total_bytes' => filesize($video_file),//動画のファイルサイズ
);
//データをPOST
$res = [twiterへデータをPOST];
/* 返り値は以下のようなjson形式で返されます。
{
  "media_id": 601413451156586496,
  "media_id_string": "601413451156586496",
  "expires_after_secs": 3599
}
*/

2.APPEND postする実際のデータを送る
5MB以上15MB以下の場合、データを5MBずつ送信する

// 1で取得したmedia_id_stringを使用
$res = json_decode($res, true);
$media_id_string = $res['media_id_string'];
// 動画ファイルのデータを読み込む
$file_data = file_get_contents($video_file);
// 5MB以上の場合この値がPOSTする度増加
$segment_index = 0;
// 読み込んだデータの長さ
$len = strlen($file_data);
// ファイルサイズを分割するサイズ
$chank = 5 * 1024 * 1024;

// $file_dataがなくなるまで回す
while(strlen($file_data) > 0){
  if($len/$chank>0){
    $buf = substr($file_data, 0,$chank);
    $file_data = substr($file_data, $chank);
    $len = $len - $chank;
  } else {
    $buf = $file_data;
    $file_data = "";
    $len = 0;
  }
  //POSTデータ作成
  $post_data = array(
      'command'=>'APPEND',
      'media_data' => base64_encode($buf),
      'media_id' => $media_id_string,
      'segment_index' => $segment_index,
  );
  $res =  [twiterへデータをPOST];
  $res = json_decode($res, true);
  // エラーの場合処理終了(成功している場合はなにも返り値がない)
  if (isset($res['errors'])) {
    exit;
  }
  $segment_index++;
}

3.FINALIZE postした実際のデータが終わったことを伝える

$post_data = array(
  'command'=>'FINALIZE',
  'media_id' => $media_id_string,
);
$res = [twiterへデータをPOST];
$res = json_decode($res, true);
/* 成功した場合、以下の様な内容のjsonが返ってきます。
{
  "media_id":628618021481787392,
  "media_id_string":"628618021481787392",
  "size":4583156,
  "expires_after_secs":3600,
  "video":{
    "video_type":"video\/mp4"
  }
}
*/

4.media_ids付でツイート

$url = "https://api.twitter.com/1.1/statuses/update.json";
$dat = array(
  'status'  => [ツイート内容],
  'media_ids' => $media_id_string,
);
$res = [twiterへデータをPOST];
$res = json_decode($res, true);

※成功すればツイート内容が返って来ます。

以上で動画の投稿が一応出来ました。

※本当はバイナリでデータをそのまま送りたいのだが、バイナリをそのままおくるとクジラ的なエラーが返ってきてしまう始末・・・

ふぅ~なかなか今回は疲れました、、

スポンサーリンク

[メモ]twitter REST API による複数画像付きツイートの仕方

久方ぶりです。

今回は、twitterのAPIでツイートに複数の画像を指定する仕方を記述します。

基本的には、次のURLの通り・・・
https://dev.twitter.com/docs/api/multiple-media-extended-entities

で、見に行くの面倒な人用に、簡単に書くと以下の通り

https://upload.twitter.com/1.1/media/upload.json

上記エンドポイントに対して、画像ファイルを1つずつuploadします。
uploadが成功すると

{
	"image": {
		"w": 1546,
		"h": 1024,
		"image_type": "image\/jpeg"
	},
	"media_id": 460938773744717825,
	"media_id_string": "460938773744717825",
	"size": 530963
}

このような、値が返って来ます。
で、返ってきた「media_id」か「media_id_string」を使ってツイートのREST APIをたたきます。

ツイートするためのエンドポイントは以下の通りです。

https://api.twitter.com/1.1/statuses/update.json
※uploadした画像のmedia_idが有効な時間はuploadしてから60分らしいです。
上記のリンク先にそんなことが書かれていた気がします。

で、、画像付きをツイートするには、今まで通りのパラメータに「media_ids」パラメータを追加します。
「media_ids」は先ほどuploadしたときの返り値のmedia_idを最大4つ(2014-06-25現在)まで設定できます。
複数指定のしかたはmedia_idをカンマ区切りで記述すればOKです。

因みに、ツイート時に5つのmedia_idを設定すると次のエラーコードとメッセージがjsonで返ってきました。
code=44
message=media_ids parameter is invalid.

また、画像1枚だけを上記の要領でツイートすると、ツイートはされますが、公式のタイムラインに初期表示として画像が表示されないようです。(2014-06-25現在)
なので、1枚しかないのであれば、今まで通り以下のREST APIを使用するのがいいと思います。

https://api.twitter.com/1.1/statuses/update_with_media.json

以上、ちょっとした覚書でした。

2014-10-31 追記:
アニメーションgifは1枚のみ可能。
アニメーションgif + jpg ×
アニメーションgif + 通常のgif ×

2015-05-21 追加:
エンドポイント /1.1/statuses/update_with_media.jsonが本日使用できなくなったっぽいです。
また、公式のweb表示も1枚のときでも正しくサムネイル表示されるようになっているようです。
※これはいつからなおったのか確認していません・・

スポンサーリンク