2015年9月 のアーカイブ


ツイッターでツイート数取得が10月からできなくなるという話が出ています。

Twitter:ツイート数取得API「count.json」提供終了のお知らせ

http://did2memo.net/2015/09/28/twitter-count-json-shut-down/

ツイッターの情報が日本語でまとめられている所が思っているより少なくて、情報源がここばっかりなのが少し面白いですが、そこを面白がってる場合じゃないかもしれません。
今まで

http://urls.api.twitter.com/1/urls/count.json?url=http://www.mybenjo.net/

という具合にURL指定で取得できていたツイート数も取れなくなるんじゃないか、そもそもそのURLは公式サポートしてないし、なんていうことになっているので、実際近い将来機能しなくなっても不思議じゃない。

ということで試しに似た動作をするものを作ってみました。

作ってみたサンプル

同じ要領でURL指定してアクセスします。返ってくる結果も同じJSON形式です。

http://api.dgdk.net/TwEmu/count.php?url=http://www.mybenjo.net/

※サンプルなので戻ってくるまでに3秒程度かかるようにしています。

ソースと簡単な説明

TwitterApplicationとして運用します。OAuthで認証したあとの処理になります。OAuth周りはそれだけで沢山の資料があるのですが、ざっくり”abraham/twitteroauth”のライブラリを利用します。
ライブラリはPHP5.4向けに書かれているので、arrayの定義方法が5.3以前と違うのでエラーが発生します。5.3以前の環境の場合は、[] を array()に書き換える必要があります。世界は着実に動いていますね。

abraham/twitteroauth

https://github.com/abraham/twitteroauth

ソースはライブラリのドキュメントにあるサンプルソースとほぼ同じ内容になります。ざっとこんな感じ。

<?php
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

define("CONSUMER_KEY"   , "コンシューマーキー");
define("CONSUMER_SECRET", "コンシューマーシークレット");
$access_token = "アクセストークン";
$access_token_secret = "アクセストークンシークレット";

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
$statuses = $connection->get("search/tweets", array("count"=>100,"q"=>$_GET["url"]));

header("Content-Type: application/json; charset=utf-8");
echo json_encode(array("count"=>count($statuses->statuses),"url"=>$_GET["url"]));
?>

ツイートをURLで検索して結果の件数をカウントしているだけ、実にあっさりしたもの。
URLのチェックやAPIの使用制限を考慮したキャッシュなどの工夫は必要に応じて実施する必要がある。

誰に向けて書いていいかわからないのでモヤッとしてます

そもそもTwitterAPI分かる人にとって特になんともないことだし、そういうのが分からない人にとっては書いてあることが分かるのか、モヤッとしています。そう思うと理想としてはURL一発で取得できる仕組みが今後も継続するのがいいんだろうなあと考えるのですが、企業のサービスとして継続できるのか?みたいな部分はあるんだろうと思います。

でも、そもそもツイート数ってそんなに大事なものなんでしょうかね。沢山ツイートされていると価値があるような感じになるのは人間として当たり前なのかな?なんてことを考えてしまいます。


環境

iPhone5
iOS 8.4.1
他の環境はチェックしていない。

現象

audioタグで音声を再生させるテストページを作成。以下のようなざっくりシンプルなソースを書いた。

<audio src="./test.mp3" id="sound"></audio>
<p id="play">PLAY</p>

<script>
$("#play").click(function(){
  document.getElementById("sound").play();
});
</script>

PLAYをタップしたらtest.mp3が再生される仕組みなのだけど、どうしても音が出ない。PCのブラウザでアクセスした場合は問題なく再生される。

間違った方向に悩む

これはmp3のエンコードがおかしくて音が出ないのでは無いか?という見当違いなことを考えてビットレートを変えてみたり、ステレオをモノラルにしてみたり、mp3をwavにしてみたりと試したのだが状況は変わらず。もちろんすべてPCでは再生される。
WEBサーバのMIME設定が漏れてるかな?と思いいじってみるも、元々PCでは再生されているわけでそんなはずもなく。

BASIC認証が足かせだった

なんかおかしいなあ、ということで試しに別サーバに置いたmp3を指定してみたら再生された。別サーバなので、環境は全然違うのだけど、これはBASIC認証なんじゃないか?ということに気付き、試しにBASIC認証外にソース一式持って行ったらあっさり動いた。

iOS関係のバグみたいだが

そもそもBASIC認証下でmp3再生するような要求は、公開前のテストサイトくらいなものなので、まあそういう不具合あっても仕方がないですよね、レアケースですよね、なんて思った次第。
ざっと検索すると似たような事例がiOSのバグとしてあるようだけど、いつまでたってもBASIC認証を記憶するようにならないMobile Safariに、多くを期待しても仕方がないのでは、という風に考えている。