小僧どもへ

2012.02.23(木)

2月14日は、バレンタインデーでしたね。

朝からtwitterのTLでもチョコをもろただの、欲しいだの、日本中がなにやら浮かれていたので、

先生を復活させてみました。

皆さんは、ホットドッグ・プレスという雑誌を覚えているでしょうか?

いわゆる男子向けのおしゃれ?で、下世話?な、サブカル情報誌です。

その雑誌の中で、先生は『試みの地平線』というハードボイルドな人生相談を連載されていました。

内容的には若者が悩みを相談すると、「小僧ども!」という出だしから、先生がハードボイルドに回答してくるというものでした。(閲覧注意)

当時、田舎の小僧だった僕たちにとって、その内容は日常の純潔とはかけ離れた、かなり過激な内容でしたが、真摯な態度と本質をつくまっすぐな意見は、なんだか心に響いたものでした。

そんな先生のbotを2~3年くらい前に勢いでつくってみたのですが、2010年にtwitterの認証方法が、ベーシック認証から、OAuthに変わった時、対応させようにもよくわからなくて、面倒くさくなって、そのまま停止させてました。

2月のある日、出社して、何を思ったのか、ふとアカウントにログインしてみると、停止しているにも関わらず、日に1件くらいは、相変わらず先生に悩みを打ち明けている人たちがいました。

そんなこんなで、バレンタインデー。放置していたOAuth認証に真面目に向きあってみたという流れです。

その際、いろいろなサイトを参考にしながら作業したのですが、いくつか詰まるところがあったので、備忘録的にプロセスを書いておきます。

まず、botを作るには、以下のリンクからtwitterへアプリケーション登録をする必要があります。

https://dev.twitter.com/apps

アプリケーション登録をすると、「Consumer key」「Consumer secret」「Access Token」「Access Token Secret」を取得できるので、これらを利用して認証をします。


登録するtwitterIDにログインした状態で、twitter developersにログインします。


Create new applicationをクリックします。


名前、概要、URLを入力し


規約に同意して、見えにくい文字認証を入力し、Create your Twitter applicationをクリックします。


アプリケーションのページに移動します。Create my access tokenをクリックして、Access Tokenを表示させます。


今回は投稿をするので、settingタブをクリックして


Access levelをRead, Write and Access direct messagesに変更します。Read and Writeでも大丈夫だと思いますが、あとあと変更するのがめんどくさいので、フルフルにしてみています。(僕はこの部分を見逃していて、2時間ほど無駄な時間を過ごしました・・・)

認証に関してはOAuth.phpとtwitteroauth.phpを利用しまました。以下のgithubで配布されています。

https://github.com/abraham/twitteroauth

よくわかりませんが、これらを利用したことで、ほんのちょっとプログラム書いただけでbotが出来ました。

$consumer_key=”hoge”;
$consumer_secret=”hogehoge”;
$access_token=”hogehogehoge”;
$access_token_secret=”hogehogehogehoge”;

$twitter = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

$update_url = ‘https://twitter.com/statuses/update.xml’;
$method = ‘POST’;
$message = ‘うんこ’;
$params = array(‘status’ => $message);

$twitter->OAuthRequest($update_url,$method,$params);

普通に「うんこ」と投稿するだけなら、このように10行書いて実行するだけでいけます。

あとは、適当にmentionsを取得して、解析して、差分に対して返信するようにするだけです。

phpを知らない僕でもできました。簡単ですね。

もしも、bot作ってみたいなーと思ってる人がいたら、是非どうぞ。

不明な点などありましたら、@kitakata_kenzo宛にお願いします。

youtubeの動画URLを探すぜ

2010.04.13(火)

こんにちわ。beshinです。
うちの娘もスクスク育ってます。僕も成長しないといけないので、
Flashばかりではなく、たまには違うことやってみます。

ついこの前のyoutubeのリニューアルに伴い動画へのアクセス方法の仕様が変わりました。
前回のエントリーでインプットでyoutube使って、別の形でアウトプットさせようと企んでいた僕にとっては一大事です。
前はここのCGIをまんま使わせてもらってましたが、仕様が変わって以来うまく動いてないようです…
http://nondelion.com/archives/2009/04/08/2255

他の動画ダウンロード系のウェブサービスも見ても、軒並み停止してるぽいです。

仕方がないので、自分でやってみることにしました。

結論から言うと、今回はうまくいきませんでした。

でも、とりあえずプロセスだけ共有します。(まああんまり役に立たないですが…)

まずはじめに、動画のファイルを調べました。
昔はIEとかのテンポラリアイテムをみてやってましたが、firebug接続でダウンロードの様子を確認できるので楽チンです。
一覧からそれっぽいファイルを探します。

次に、動画へのAPIを確認しました。
http://www.youtube.com/get_video_info自体はのこっているっぽいので、動画のIDを渡してみました。

http://www.youtube.com/get_video_info?video_id=eWp7R_uoWN4
get_video_infoというファイルがダウンロードできるので中身をみます。
いろいろ解析してみると、さっきのダウンロードファイルぽいURLがありますね。

というわけで超適当にPHP買いてURLを表示させてみます。

<?php

require_once “HTTP/Request.php”;
$key = “fmt_stream_map”;
$id = $_GET["id"];
$req =& new HTTP_Request(“http://www.youtube.com/get_video_info?video_id=”.$id);
if (!PEAR::isError($req->sendRequest())) {
$elements_body = split(‘&’,$req->getResponseBody());
}
$querys = array();
foreach( $elements_body as $element ){
$arr = split(‘=’,$element);
$querys[$arr[0]] = $arr[1];
print $querys[$arr[0]].”<br>\n”;
}
$arr = split(‘\||,’,urldecode($querys[$key]));
print ‘<a href=’.$arr[1].’>’.$arr[1].’</a>’;
?>

localhostからアクセスすると、普通にダウンロードできました。

お!とか言って小躍りとかしましたね。

調子にのって、サーバーで確認しました。

失敗です。まあ当たり前っちゃ当たり前。

とりあえず、現状を把握するためにいろいろ試してみました。

firebugのURLをfirefoxで見るとセーフ。
他のブラウザで見るとアウト。(UAが違うから?)

localhostで表示したURLはどのブラウザでみてもセーフ。(リファラーが同じだから?)

サーバー経由でアクセスした場合はどれでもアウト。(リファラーが違うから?)

さてさて、とりあえずリファラーとUAあたりかな?このへんをどうにかできるテクがあればいけそうだけど、今回は断念・・・。

なんかわかったら続き書きます。