[メモ]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文字以上の文字を取得できます。

スポンサーリンク

[覚書]iptableの設定順番[メモ]

超個人的なメモ

iptables -L
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport [port番号] -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
service iptables save
cat /etc/sysconfig/iptables

スポンサーリンク

[メモ]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);

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

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

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

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

スポンサーリンク

[メモ]プログラムによるinstagramへの写真投稿[API]

久しぶりの投稿です・・・

instagramに写真をuploadさせるやり方をグーグル先生に聞いて回ったところ

プログラムで投稿している人が居るではないですか!

その人のプログラムは基本的に、instagramのアカウントを持っていないと投稿することが出来ないみたいです。(なんでもそうか・・、※プログラム自体にIDとパスワードが必要になる感じなのがちょっといただけない感じです。本来であれば、アクセストークンなどを使用してuploadできるのが望ましいんですが・・)

投稿する画像のサイズは良く分からないですが、正方形でないとエラーになるようです。(他のブログを読んでいると縦横640px、サイズ500k以内的なことも書かれていた)

比率がおかしい場合のエラー時の戻り値

Array
(
    [0] => 400
    [1] => {"status":"fail","message":"Uploaded image isn't square"}
)

成功時の戻り値

Array
(
    [0] => 200
    [1] => {"status":"ok","media_id":"987765809705141669_15359112"}
)

尚、APIとしてのinstagramからの提供はないみたいですので、いつ変更されるかわからない感じです。

※instagramのデベロッパーサイト
https://instagram.com/developer/clients/manage/

※今回見つけたサイト
http://stackoverflow.com/questions/18844706/how-to-post-pictures-to-instagram-using-api
↑からの本家http://lancenewman.me/posting-a-photo-to-instagram-without-a-phone/

元記事のソースをそのまま(少しは修正)使用するだけで投稿は出来ました。

感想としては、上記投稿と他API提供されている機能などを盛り込みつつ自分なりのアプリを作ると面白いかもしれません。

最後に要注意なのは、上記プログラムから投稿するのはいいが、削除はスマートフォンのアプリからしか現在削除できないこと。
なのでこのプログラムを試す前には、アプリとID、パスワードをしっかり紐付け&メモしておく必要があるかと思います。

スポンサーリンク