【PHP】短縮URL bit.ly
Twitterbotでニュース配信したかったのでbit.lyのapiを使ってみました。
-
- bit.lyにアカウント登録する(APIkeyが発行される)
- ユーザ名とAPIkeyを入れる
- 短縮したいURLを入れる
http://api.bit.ly/shorten?version=2.0.1&login=USERNAME&apiKey=APIkey&longUrl=URL
をfile_get_contentsしてsimplexml_load_stringして終わり
function shortenUrl($url){
$username = "ほげほげ";
$apikey = "ほげほげ";
$bitly_url = "http://api.bit.ly/shorten?version=2.0.1&login=" .$username;
$bitly_url .= "&apiKey=" .$apikey;
$bitly_url .= "&longUrl=" .$url;
$bitly_url .= "&format=xml";
$XML = file_get_contents($bitly_url);
$XML = simplexml_load_string($XML);
return $XML->results->nodeKeyVal->shortUrl;
}
【PHP】Twitter発言数チェック その2 & strtotime関数
前回やったのはその日に何回発言したか、でしたが「その日」しか分からないので0:00を丁度過ぎた頃にチェックしても、どれくらい発言したか結局分かりません。
ということで、24時間以内にどれだけ発言したか、に変えようと思いました。
前回はただ日付を文字列比較していただけなのですがそれだと「24時間以内」を実現するのはめんどくさい。
そこで今回はタイムスタンプを利用します。
しかしxmlで取得できるのはこれ。
<created at>Wed Nov 18 22:37:36 +0000 2009</created_at>
monthが英字だし1つずつ取り出すのも処理が大変です。
しかしPHPには英字をタイムスタンプにする関数がきちんと用意されていました!
前回使ったstrtotime関数が英字も処理してくれるようです。
試しに上の文字列そのままでやってみたらきちんとタイムスタンプが取れました。
今から1日前のタイムスタンプと、xmlで取得した
$yesterday = strtotime("-1 day");
$time= strtotime($created_at);
if($yesterday < $time){
$count++;
}
補足
つまり
//日本時間 $time = "Wed Oct 06 06:00:00";
と
//グリニッジ標準時 $time = "Tue Oct 05 21:00:00 +0000 2010";
この2つをstrtotime関数にかけると同じタイムスタンプが取得できます。
1日前のタイムスタンプ($yesterday)は日本時間の日付から算出していますが、これにより暦を変換せずとも(GMTまたはJSTに揃えなくても)直接比較ができます。
最初からこれにするべきでしたね(笑)
参考
memo
グリモンで色々やってる先輩や同期がいるのでもし自分がTwitterをいじるなら
- in_reply_to_idを全てつなげて会話が見えるようにする(例:HootSuite、Saezuri)
- 他人のページに行ったらフォローされているか見えるようにする
かな?
実現できるかは別で。全く触ったことないので。
もしかしたらもうやってる人いるかも。
追記
- フォローされている人とされていない人の発言で色変える(例:Tween)
- ふぁぼられ数表示(出来たら鍵アカウント…)
追記2
最初の2つはすでにありましたね。でもやりたい方法とはちょっと違った感じ。
他人のページに行ってフォローされているか、はそれで十分かな。
in_reply_to_idは、私の想像だと普段は表示しないけどクリックしたらだらだらーと表示させるイメージです。(まあつまりHootSuiteやSaezuriと同じイメージですね)
入れたグリモンは最初から4つほど会話が見られるようになってます。
やっぱりふぁぼられ見られるようにしたいなあ。
追記3
in_reply_to_idはChromeにグリモン入れると実現されてました^p^
【Twitter+OAuth】ページ遷移(セッション)とxml
発言数チェックが取り敢えず出来ました。
次は鍵アカウントも出来るようにOAuth認証させてやってみよう!
ということでまずは以前書いたOAuth認証のプログラム使ってやりました。
ページ遷移してみる
OAuthについてはよくわかっていないのですがアカウントが2つ情報を持ってきてそれをセッション管理しておけばいい! と解釈してまずはページ遷移をしても情報が取れるかやってみました。
新しいファイルに必要かなと思われるプログラムの一部をコピペ…。
getBody()して持ってこれるか挑戦。
撃沈。
Could not authenticate with OAuth
とか言われました。
ぐぐったらどうやら例の2つの情報(access tokenとaccess token secret)がセッションに保存されていないよう。
なんでかな、と参考書を読んだところhtmlを書き始めるより前にsession_start()を書かないといけないとあるじゃないですか。
書いたらきちんと取得してくれました。
必要な情報をxmlから取得
ここまで来たらあとはbotなどでやった処理と同じだーとXMLをsimplexml_load_stringして…とやるとまたエラー。
色々試行錯誤してみましたが直にxmlを要求してもBasic認証は終わったと言われるだけで中身が見れません…。
詰んだ/(^o^)\
どうしようかなとphaさんのbotスクリプトを眺めていたらまさに知りたかったことが書いてあるじゃないですか!
どうやらxmlをOAuthで取得したものをそのままsimplexml_load_stringしてはいけないようです。
取得したものをgetBody()し、それををsimplexml_load_stringするようです。
こんな感じになりました。
$result = $oauth->sendRequest('http://api.twitter.com/1/statuses/user_timeline.xml', array("count"=>"200"), 'GET');
$content = $result->getBody();
$xml = simplexml_load_string($content);
foreach($xml->status as $status){
$text = $status->text;
$screen_name = $status->user->screen_name;
}あとは発言数チェックできるようちょこちょこ書いて終わり。
【PHP】Twitterの発言数チェック
OAuthをかませて何かやりたいと考え中。
取り敢えず公開アカウントで出来る(トークンとか必要なくできる)簡単な機能を作ってからと思い友人のbotを見てその日の発言数を数えるものを作ろうと思いました。
知りたいアカウントがあったことも理由の1つですが。
フォームにIDを入力しそのアカウントの発言(user_timeline)を取得し数えるのですが。
取得したツイートの投稿日時がGMTなのでJSTに変換して数えないといけません。
実際の取得したツイートの投稿時間は9月17日の0:50なのですが
<created_at>Thu Sep 16 15:50:17 +0000 2010</created_at>
このようになっています。
最初はそのまま計算して前日の発言も加える〜とかよく分からないことやっていたんですが実行する時間帯によっておかしくなるなと気づきGMTをJSTに変換できる方法はないかと探したらありました。
最後の
echo date('D M d H:i:s T Y', strtotime($deftime)+9*60*60);これですね。
私のは場合はこんな感じ。
foreach($XML->status as $state){
$gmt = $state->created_at;
$gmt = mb_convert_kana($gmt,"as",'utf-8');
$gmt = date("D M d H:i:s", strtotime($gmt)+9);
if(preg_match("/$today/",$gmt) === 1){
$count++;
}
}参考にさせていただいたところは +9*60*60 と書かれているのですが、私のでやると+9だけで良いようです。
ちなみに$todayには
$today = date("D M d");が入っています。「曜日、月、日」だけが今日と同じであれば+1するようにしています。
ですがapiの関係で200までしか取得できないので1日に200以上postするとそれ以上は計算できないと思います^p^