Twitter

Twitter API 1.1 にやっと対応させました

2013年06月25日
TwitterのAPIがバージョンアップし、大幅に仕様が変わるとずっと以前に聞いていたのですが、Twitter関連のツールは販売していないので、そのまま忘れてました。
ある日突然動かなくなり、変わると言っていた事を思い出しました。

自分用のツールのみなので、少しずつ対応させていこうと思っていたのですが、今日やっとよく使う機能のみ対応させました。

1.1からは全てのAPIでOAuth認証が必要になります。
1.0のときも一部で必要だったので、繋がるようにはなっています。これを全てのAPIで利用すれば大丈夫です。

OAuth認証のやり方は、PHPでOAuth認証が参考になります。
OAuth認証用のライブラリを公開してくださっている方がいらっしゃるので、ありがたくそれを利用させていただきます。

APIのURLも変更になっています。
API URL(英語)
API URL(一覧だけ日本語)

一番戸惑ったのが、今まではRSSなどで返ってきていたデータが、JSONで返ってくるようになったことです。1.0でもJSONはありましたが、私は使っていなかったので、変更しなくてはいけませんでした。

【json_decode】関数を用いて、JSONを配列に入れてしまうと、今までのソースに少し変更を加えるだけで使えることがわかりました。
PHPでJSONを処理する

フォローしているのにフォローされていない、フォローされているけどフォローしていないアカウントを調べたり、ハッシュタグ付きのツイートを一覧表示、返信をするとき【@ユーザー名】や【RT 相手のツイート】を入力フォームにデフォルトで設定する機能など、自分用にアレンジした機能が使えないとなると、結構不便でした。

よく使う機能が復元できたので良かったです。

色々調べていると、TwitterのSandboxなるものを見つけました。
ちょっと使ってみたのですが、すぐには使えませんでした。説明を読まないと駄目ですね。時間があるとき使い方を調べてみようと思います。

Twitter

軽いっ!

2012年11月30日
以前から機能追加しているTwitterツールですが、やっと投稿テストできました。
テスト投稿すればいいのですが、急いでいるわけではないので、実際のつぶやきを投稿しました。
やっと投稿したい返事ができたので、やってみました。

ハッシュタグの付いたつぶやきを一覧表示、
返信したいつぶやきをクリック、
別タブに【@返信先のユーザー】、【RT つぶやき内容】が自動で入った状態で表示されるので、
内容を加工して投稿、
です。

まず、軽い!!
ツイッターの画面は重くて使えたものではなかったので、これでストレスがずいぶん減ります。

次に【@返信先のユーザー】、【RT つぶやき内容】が自動で入り、便利!
これも入れるのに大変な苦労を強いられていたので、ストレスが減ります。

そしていざ投稿。
・・・
エラー。

URLがないとのことです。
どうやらPOSTするURLが変更になったようです。
今までは
https://twitter.com/statuses/update.xml
でしたが、
https://api.twitter.com/1/statuses/update.xml
に変わったようです。

修正して、再度投稿!
・・・
またエラーです。

今度はxml解析に失敗したと言ってます。
調べると、画面表示する場合は、
header("Content-Type: application/xml");
は要らないとのこと。取ってみます。
なんなく成功。

一応できました。

つぶやきを入力する画面も、軽くてこちらの入力についてきてくれます。
ツイッターの画面は重すぎて入力に追いつかないからなぁ。

つぶやきを自動取得したとき、新しく取得したつぶやきの背景色を変えてみました。これも便利です。

ちょっとした機能で使いやすくなると、無理矢理探してでも機能を付けたくなってしまいます。

Twitter

自動リロードで自動記事取得

2012年11月16日
Twitterツールに追加している、軽快に返信機能は概ね正しく動いているようです。
しかも、軽い!これが一番!!

今日は自動で新しいつぶやきを取得する機能を付けました。
ブラウザのリロード(リフレッシュ)機能を使えばできるはずです。

まず試したのは、メタタグによるリフレッシュです。
<meta http-equiv="refresh" content="秒数">
これで、指定した秒数ごとにリフレッシュされます。

ところが、画面の表示が新しくなるだけで、コマンドは走りませんでした。

ブラウザの【更新】が自動でできれば機能が実現できるはずなんですが。

次に試したのが、JavaScriptです。
<script type="text/javascript" language="javascript">
<!--
setTimeout("location.reload()",ミリ秒数);
// -->
</script>
ミリ秒数で指定することに注意が必要です。
1秒なら1000、5秒なら5000、10秒なら10000とします。

こちらはうまくいきました。

これで自動的に新しいつぶやきを取得し、画面に表示してくれます。

Twitter

Twitterで軽快に返信を

2012年11月13日
ツイッターの画面が重たい上、使いにくく、つぶやくのを躊躇してしまっているので、作っていたツールに機能を追加することにしました。

そう言えば、販売する気でツイッターツールを作っていましたが、すっかり自分だけ用になってしまってます。

追加する機能は、指定したハッシュタグ(別にハッシュタグでなくてもいいのですが)の付いたつぶやきを画面に一覧表示していく機能です。ツイッターが提供している機能にもあります。ですが、これがスクロールも満足にできないほど重く、つぶやき内容もコピーしにくく使いにくいのです。

目指すのは、
・軽い。スクロールも楽にできるように。
・返信ボタンを押すと、【RT つぶやき内容】をあらかじめ表示。
  etc.
です。

ツイッターから取得したつぶやきはファイルに追加保存、ファイルから必要な件数を取得して画面に表示するようにします。これで軽くなるはずです。
ファイルは半日に一度など定期的に新しくします。

返信のリンクをクリックすると、別タグをオープンし、つぶやきに含まれている【@ユーザー】と【@返信先のユーザー】、【RT つぶやき内容】をあらかじめテキストエリアに表示します。
別タグを立ち上げるのは、できればもう少し軽い方法がないかなと思いますが、とりあえずタグをオープンすることにします。

これだけで格段に使いやすくなるはずです。

以前、色々な機能を盛り込んだツールを作ろうとしていたので、機能追加は思っていたより早くできました。TwitterAPIはそのまま使えたので、楽でした。

ザックリできたので、使いながら作りこんでいきます。

しかし、どうしようかなこのツール。販売すべきか?

Twitter

DMの履歴が送信されない?

2011年09月13日
出来上がってもう何ヶ月も経つTwitterツールですが、今日送ったDMの履歴がメールで送信されないことに気がつきました。
調べてみると、2011年6月から仕様が変更になったようです。

DMの操作、削除を引き続きAPIから行うには、次の2点の更新をしなければいけません。

1. Application type の変更
2. Consumer key と Consumer secret の変更

https://dev.twitter.com/
からログインします。

DMを操作するアプリケーションを選択します。

【Settings】−【Application type】で【Read, Write and Access direct messages】を選びます。

【Reset keys】でConsumer key と Consumer secret をリセットします。

これでサードパーティのアプリからAPIでDMを操作できるようになります。

Twitter

ツールはリリース前に

2011年02月16日
やっと形になったTwitterツールですが、やっぱりバグが多いです。
ん?なぜ動かない?? ということがしばしば。まだ自分のアカウントでのテストなので全く問題はありませんが。
仕様が二転三転したことも原因の1つでしょう。

リリース前にじっくり動かしてみると安心できるので、ゆったり、じっくりテストです。

Twitter

やっと形になりました

2011年02月13日
仕様が決まらず二転三転し、苦しんだTwitterツールですが、なんとか最初の形ができました。
あんなに時間がかかってしんどかったのに、最初の形だけです・・・

ちゃんと動くようになると、自動つぶやきはもちろん、
 自分のフォロー・フォロワーから友達関係を調べ、フォロー・アンフォローしたり、
 ファンになった方のフォローをチェックして、自分もフォローしたり、
 特定のつぶやきをしている人を探し出してフォローしたり、
などできるようになります。

自分のアカウントでテスト開始です。

Twitter

二転三転・・・

2011年02月11日
4〜5日前に、仕様が決まったはずのTwitterツール・・・
二転三転しています。正直疲れました。

問題なのは、たくさんのデータを取ってこなければいけないとき、です。
取得の途中で、タイムアウト、TwitterAPI制限超え、などで処理が中断したときどうするか。
自動でフォロー・アンフォロー、の処理とバッティングしないようにフラグを立てて処理をしなければいけません。
その上、自動でフォロー・アンフォローをしない場合もあります。

これでよし!と思ってコーディングしていると、この場合がうまくいかないではなか!が見つかり、また考え直し、を繰り返しています。

早く終わらせて、自分のフォロー・フォロワー増に利用したいんだけどなぁ。

Twitter

やっぱり重い・・・

2011年02月06日
昨日ずいぶん早くなったと喜んだTwitterAPI利用ですが、やはりデータが多くなると当然のごとく重くなります。
ブラウザからの利用の場合、サーバーが厳しく実行時間を規制している場合も多く、タイムアウトになる可能性が大です。

こういうときよく取る手は、処理を分割する、です。
まず最初の100件を取得して、画面に表示します。
そして次へをクリックあるいは裏で次の100件を取得。これを最後まで繰り返します。
こうすると体感速度が上がります。

この考えを導入しようかと思ったのですが、ちょっと問題が。
自分がファンになった方のフォローを調べて、自分もフォローしたい場合があります。
このとき、すでに自分がフォローしている方は除いて表示したくなります。

ということは、自分のフォローと、ファンのフォローの2つを引いてこなければいけないってこと?
いくらなんでもそれは重くていやだ。とうことで、自分がフォローしているかどうかわかる項目はないかと調べてみました。

すると、ありました。
【following】が【true】だと自分もフォローしている、【false】だとフォローしていないようです。これでいこう。

それでも、フォロー・フォロワーの多い場合は、やはり工夫が必要になってくると思われます。サーバーの割り当てメモリーも使い果たしてしまうこともあるようです。

Webに表示、cronで実行の両方を付けることにしよう。
作り込みに入ります。

Twitter

TwitterAPIの結果をWebへ出力

2011年02月05日
今まではcronからスクリプトを実行し、TwitterAPIからデータを受け取ることを前提にコーディングしていました。
でも、フォローやフォロワー取得など、Webからボタンクリックで実行できるほうが便利かなと思い、cron用からWeb用に改変することにしました。

ところが、重い!!
滅茶苦茶重い。

その上、xmlエラーになって、画面表示ができません。

まずは、どこで時間がかかっているか調べます。
ポイントごとに現在時刻を取得、それをファイルに書き出して調べました。
どこにも時間がかかっているところはありません。困ったな。

ちょっと考えます。
xmlエラーということは、TwitterAPIから返ってきたhttpヘッダが出力されているということではないでしょうか。
そこで、httpヘッダをクリアする方法を探してみました。
ところが、httpヘッダをクリアする関数【header_remove】はバージョンの違いで利用できません。

そこで、データを取得後、リダイレクトしてみました。

早い!!

これならWebから実行してもストレスなく動かせるかもしれません。
たくさんのデータで実験してみることにします。

どうやらデータは早くに取得できていたのですが、xmlの解釈ができず、ブラウザ表示に時間がかかっていたようです。

Twitter

httpヘッダを読む

2011年02月03日
TwitterのAPIには、接続回数に制限があります。
制限数は基本的には決まっているのですが、時々変化するようです。1時間毎にクリアされるもの、1日毎にクリアされるものもあり、APIの種類によっても変わるようです。

はじめは、こちらでカウントしようかと考えたのですが、クリアのタイミングも分からないし、Twitterが情報を送ってくれていないかと調べてみました。
Twitter API 仕様書 の【API の実行回数制限】に記述があります。
どうやらヘッダが読めれば値がわかるようです。
ヘッダ中の
【X-RateLimit-Limit】が実行可能な回数
【X-RateLimit-Remaining】があと何回実行可能
だそうです。

TwitterのOAuth認証には、abraham's twitteroauth at master - GitHubを使わせてもらってます。このソースからヘッダを取得できればいいのですが。

色々調べると、それらしき部分がありました。
走らせて値を表示させてみます。
ううん。欲しい情報がなにもない。

ソースをみると、【apache_request_headers】を使っています。
【apache_request_headers】を調べると、PHPがスクリプトとして動いているときにのみ使える関数でした。
私の環境は、CGIです。CGIのときは、$_SERVERの値の一部を返しているようです。

では、自分で何とかできないか、とPHPの関数を調べると、【get_headers】関数を利用するとできるようです。

もっと簡単な方法はないかな。
abraham's twitteroauth at master - GitHubはエラーが起こると、その理由を返してくれます。
それは簡単に取得できるので、それを利用することにします。
エラー(API拒否)をTwitterに起こさせないようにするのではなく、エラーになるまで実行し、エラーが起こった時点で処理を中断するという考え方です。

これでAPI制限に引っかかっても、次回その続きから実行できるようになりました。

Twitter

友達関係の変更

2011年01月31日
Twitterで、フォローとフォロワーをひいてきて、フォローだけどフォロワーではない人、フォロワーだけどフォローでない人、を一覧表示することにしました。
つまり、友達関係のチェックです。こちらが一方的に友達だと思っている人、向こうが一方的に友達だと思っている人を一覧にします。

こういった検索APIはTwitterにはないようなので、いったんフォロワーとフォローを全てひいてきて、ファイルに保存します(何かで使うかもしれないので)。
その後、ファイル内容を比較して、友達関係を調べます。

Twitterの画面ではこれはチェックできないので便利です。

こうなるとやりたくなるのが、その画面からフォローしたり、フォローをはずしたりすることです。表示するだけではもったいない。

一覧にはリンクもはっているので、つぶやきなどを確認しながら、手動でフォローしたりはずしたりもできます。

でも、Twitterって重いんです。
短気な私はイライラすることもしばしば。
やっぱり裏で実行したくなります。

つぶやきの自動投稿や、DMの自動送信など、cronを使って裏で実行する予定なので、それに乗せることにしました。

APIからフォローする方法は、Twitterで友達になるで書いたとおりです。

フォローを解除するには、APIのURLが
http://api.twitter.com/1/friendships/destroy/tw1.xml
に代わるだけです。(【tw1】はフォロー解除したいユーザーID)

だんだんツールの形になっていくので、ちょっと嬉しいです。

Twitter

Twitterで友達になる

2011年01月29日
TwitterAPIからフォローする方法です。

【tw1】というユーザーをフォローしたい場合、OAuth認証後、
http://api.twitter.com/1/friendships/create/tw1.xml
とすればOKです。

なんともあっけないですが、これでOK。

Twitter

Twitterで自分宛、自分が他人に宛てたつぶやきを検索する

2011年01月25日
TwitterAPIで自分への返信、あるいは自分が返信したつぶやきを引いてこようとしています。

【@自分のユーザーID】となっている、自分宛へのつぶやきを引いてくる方法は色々あります。
Twitterのつぶやきを検索してみる】で書いたAPIのパラメータに【to:ユーザーID】を使用してもOK。
【http://api.twitter.com/1/statuses/mentions.format】(format:xml、json、rss、atom)でもOK。
廃止になるかもしれませんが、【http://api.twitter.com/1/statuses/replies.format】format:xml、json、rss、atom)でもOK。

ところが、自分が誰かに送ったつぶやきを取得する方法は用意されていません。
そこで、【http://search.twitter.com/search.atom】(jsonでもOK)を利用して、自分のつぶやきの中で、【@】を含むものを取得してみます。
しかし、確かにつぶやいているのに、取得できません。
【@つぶやき先ID】で検索するとちゃんと検索できます。
そういう仕様なのか、TwitterAPIがおかしいのか(時々あるようです)。

何度やっても検索できないので、方法を切り替えます。

まず、自分のつぶやきを全て取得します。【http://search.twitter.com/search.atom】で【from:自分のユーザーID】でできます。
次に、引いてきたつぶやきの中から【@】を含むつぶやきをチェックします。
データ量が多くなるので、できれば【@】を含むつぶやきのみ引いてきたかったのですが、仕方ありません。

これで自分が発信した誰か宛のつぶやきを取得できるようになりました。

Twitter

フォロワーを引いてくる

2011年01月18日
フォロワーを引いてくるのも、つぶやき同様、認証は必要ありません。

ついび研 ツイッタービジネス活用研究会
全フォロワーを取得する
が参考になります。
http://api.twitter.com/1/statuses/followers/TwitterのID.xml
で出力されます。

しかし、これでは100IDまでしか引いて来れません。
100ID以上ある場合は、【cursor】というオプションを使います。

最初の100IDを引いてくる場合は、【cursor=-1】とします。
こうすると、次の100UDを引っ張るための【NEXT_CURSOR】がフォロワーのデータと共に返ってきます。

【tw1】というツイッターIDのフォロワーを出力させる場合、
まず
 http://api.twitter.com/1/statuses/followers/tw1.xml?cursor=-1
として最初の100IDを取得、
フォロワーと【NEXT_CURSOR】がxmlで返されるので、解析、
次に(【NEXT_CURSOR】が1234567890の場合)
 http://api.twitter.com/1/statuses/followers/tw1.xml?cursor=1234567890
となります。
これを繰り返します。
最後のデータのときは、【NEXT_CURSOR】が【0】になります。

Twitter

Twitterのつぶやきを検索してみる

2011年01月13日
Twitterのつぶやきの検索は、ステップメールの開発でコーディングしたことがあります。それを利用することにします。

つぶやきの検索はつぶやきの投稿と違って、認証は必要ありません。
投稿は【https://twitter.com/statuses/update.xml】へしていましたが、検索は【http://search.twitter.com/search.atom】へします。【http://search.twitter.com/search.json】でもいいようです。
以前atomを使っていたので、それをそのまま利用することにします。

http://search.twitter.com/search.atom?q=検索ワード
とすれば、結果が得られます。検索ワードは、URLエンコードします。
複数の検索語をAND検索する場合【+】で、OR検索する場合【+OR+】で繋げます。
 http://search.twitter.com/search.atom?q=検索ワード1+検索ワード2
 http://search.twitter.com/search.atom?q=検索ワード1+OR+検索ワード2
となります。【検索ワード1+検索ワード2】や【検索ワード1+OR+検索ワード2
】をURLエンコードします。

ユーザーを指定することもできます。
from%3AユーザーID (【%3A】は【:】のエンコード)
とすれば、ユーザーIDがつぶやいた投稿が、
to:ユーザーID
とすれば、ユーザーIDに対してつぶやかれた投稿が検索されます。

http://search.twitter.com/search.atom?q=検索ワード1+from%3AユーザーAのID
ならば、ユーザーAにたいしてつぶやかれた投稿の中で、検索ワードを含むつぶやきを出力します。

http://search.twitter.com/search.atom?q=検索ワード1+OR+検索ワード2
-to:ユーザーAのID
ならば、検索ワード1か検索ワード2を含むつぶやきですが、ユーザーAに対して投稿されたつぶやきは除いて出力されます。

また、出力する最大つぶやき数を指定するには、
 rpp=最大数
ページを指定するには
 page=ページ数
とします。
これで検索結果が大量にあっても、複数回に分けて引いてくることができます。

 since=YYYY-MM-DD
を指定すれば、YYYY-MM-DD以降のつぶやきのみ出力されます。

言語の指定は
 lang=言語
日本語の場合はja。

これらのSQLは【&】で結びます。

例えば、
http://search.twitter.com/search.atom?q=検索ワード1+from%3AユーザーAのID&rpp=10&page=5
です。

Twitter

TwitterへAPIから投稿してみる

2011年01月12日
TwitterのOAuth認証で取得した、【Consumer key】、【Consumer secret】、【oauth_token】、【oauth_token_secret】を使って、Twitter API へ接続し、つぶやきを投稿してみます。

PHP+OAuthでTwitter - SDN Project
にサンプルコートがあるので、利用させていただきます。
OAuth認証はフリーツール
abraham/twitteroauth - GitHub
を利用させていただきます。
使い方などはPHP+OAuthでTwitter - SDN Projectにあります。

自分の環境に書き換えて、テスト投稿してみます。
あっさり成功です。

特定のユーザーに宛ててつぶやく場合は、つぶやきの本文に、【@相手のユーザーID 】を入力し、【in_reply_to_status_id】パラメータを追加するようです。
【in_reply_to_status_id】はどのつぶやきに対して返信するのか、そのつぶやきIDです。

でも、【in_reply_to_status_id】は【@相手のユーザーID 】がある場合、無視されるようです。
Twitterクライアント別 in_reply_to_status_idの扱い

Twitter

TwitterのOAuth認証

2011年01月11日
クライアントさんから連絡がないので、前から作ってみようと思っていた、Tittwer Bot を開発することにしました。
以前APIを利用して、つぶやきを検索するソースは作ったことがあります。今度はつぶやきを投稿するツールです。

おそらくネットにサンプルがゴロゴロしていると思うので、検索してみます。
すぐに探し出せました。
早速、ちょっと修正して動かしてみます。

ところが、エラーが返ってきます。
なぜだぁ。
調べてみると、どうやらTwitter API からのつぶやきは、Basic認証からOAuth認証に変更になったようです(2010年8月ごろ)。
サンプルコードはBasic認証でした。

OAuth認証のサンプルを探してみます。
こちらもすぐに出てきました。

OAuth認証用のフリーツールがあるので、それを利用するとよいようです。
ありがたや、ありがたや。

twitter/PHPでつぶやき投稿(OAuth認証)
を参考に、組み込んでいきました。
ところが、何度やっても【oauth_token】と【oauth_token_secret】が取得できません。
【Consumer key】と【Consumer secret】は取得できるのですが。
困った・・・

そこで別サイトを探してみました。
PHP+OAuthでTwitter - SDN Project
の方法で、【Consumer key】、【Consumer secret】、【oauth_token】、【oauth_token_secret】が全て取得できました。
2017年12月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
先月
来月
カテゴリ
検索
関連サイト
プロフィール
【ネットネーム】
みゅー

キャラクター by ツカエルサイト


【趣味】
・プログラミング
・写真
・楽器演奏
・手芸
・日曜大工
・家の中の不便を便利に
・考える
・自然科学
・猫と戯れる
・ジグソーパズル

【仕事】
・派遣社員でSE・PGやっていました。次の良い仕事がみつからないので、ビジネスへ注力しようと思っています。
・経験言語:VB6、VB.NET、PHP、Perl、JAVA、Oracle、SQLServer、PostgreSQL



【名前】
アン(足)

2014年4月22日生まれ 女の子
あだ名は くノ一
普段は普通にしゃべりますが、興奮すると『ニャ』を連発します

【趣味】
・狩
・ご飯を食べる
・ママのお手伝い

【仕事】
ママのビジネスの看板招き猫
ママの代わりにPC入力
仕事中のママの右腕を温める
ママに心配をかける
いろんな事をしでかしてママを退屈させない

RSSフィード