◆なんで作ったか
Tweenを使っています。
流れてきた画像をよく保存してます。
やり方としては、画像が入ったツイートURLの後ろに /large をつけてブラウザで開いて、保存してました。
5月末ごろ、Twitterの仕様変更により、/large をつけても大きい画像が出なくなりました。
それとともに、「画像の実URLに :large をつけてもダメだ、:orig を付けるんだ!」というツイートを見かけました。
おぉ本当だ!今までのは間違ってたのか‥‥
なのでその後は、ツイート内のURLをブラウザで開いて、画像で右クリックしてプロパティを開きURLをコピー、ブラウザのアドレスバーにペーストして末尾に :orig をつけてEnterキーを押す、とやってました。
めんどくせぇ!
作りました。


◆詳しい仕組み
TwitterAPIとか全く使ってません。
PHPの、curl_exec()などのcurl系関数でHTMLを取得し、preg_match()とかの正規表現で画像URLを探索してます。
待たなきゃいけないのはTwitterからの応答待ちです。一件読んでは分析し、ですがウェイトは入れてません。
でもDDoSに利用される可能性はあるもんね。7/26、1件あたり0.3秒のウェイトを入れました。
TwitterAPIを使うようになりました。今のところ、ベアラートークンを取得して statuses/show/:id で発言を取得、media の URL を抽出したら後ろに :orig を付ける、という流れです。
これだとアプリ単位で 900リクエスト/15分 だと思われるので、近いうちにユーザー認証のいる、利用者がそれぞれTwitter認証を通す形に改修したいと思っています。これなら鍵垢のツイートからも画像が得られるはず。
また今のところツイート内画像取得機能だけなうえに、110文字以上くらいの長いツイートの場合は画像のURLが載っていないというTwitterクソ仕様により、このサイトは不完全状態です。
モーメントやInstagramは非対応になってしまったままなので、このサイトはまだ不完全状態です。
ビデオやアニメーションGIFには対応しました。返ってきたJSONからvideo関係の領域をそのまま表示しています。ので content_type = application/x-mpegURL の意味はよくわかりません。見づらかったらすいません。



◆更新履歴

その他説明書きちょこちょこ変えたり、微妙に仕様変更対応や対応ミスの修正したりしてます。

2020/08/13:Twitterが言うところのアニメーションGIFに対応しました。こんなのジフじゃねーじゃねーかふざけんな!(2回目)
2020/08/05:ビデオ取得対応時にミスりまして、複数画像が含まれるツイートについて、その画像のうち1つだけしか取得できていなかったのを、修正しました。申し訳ありませんでした。
2020/08/03:ビデオの取得に対応しました。ごちゃごちゃしてるかもですが。アニメーションGIFはちょいお待ちを。
2020/07/12:110文字以上くらいの本文が長いツイートも解析できるようになりました。APIのアドレスにパラメータ1つ付けるだけだった。
2020/07/05:6/03ごろから、Twitterの仕様変更によりツイートの解析に失敗していたのを仮修正しました。もうjavascriptを解釈してどうのしないとダメっぽかったので内部全面作り直し、Developer登録してTwitterAPIを使うようになりました。一部機能ってか多くの機能喪失中。
2019/08/03:7/28より前くらいからツイートの解析に失敗していたのを修正しました。file_get_contents()ではリダイレクトしまくりになってしまうようなので、curl系統を使うようになりました。仕様変更やめてほしい。
2019/02/03:ツイート内容の後に投稿時刻を表示するようにしました。これもずっと付けたいと思っていた機能です‥‥ しかし取得したHTMLに載っている時刻をただ表示しているだけなので、たぶんこれGMTです、日本時間ではなさそうです。残念。目安程度に。
2019/02/02:Twitterのモーメント機能でまとめられたものに対応しました。 ~/i/moments/~ のURLを入れてください。モーメントのURLが書かれたツイートのURL、には対応していません。ずっと付けたいと思っていた機能です‥‥
2018/06/02:05/21から解析失敗していたのを復旧しました。Twitterの対ブラウザ仕様が変わり、User-AgentなしのHTML取得ではモバイルサイトのソースが返ってきていたことによるものでした。このプログラム上でのUser-Agentを適当に設定して回避しました、のでこの先また「お前ブラウザ古い」と判定されて失敗する日が来ると思います。
2016/08/28:TwitterAPIを使っていない状態で動画リンクを取得するのは無理なのではないかと、数ヶ月前から思っていたのを改めて表明しました。「不適切な云々」が、ログインしないとダメなのではないかなぁという考え。あと広告をつけてみました。
2015/12/27:下記時点では逆についっぷる、Instagram、Twitpicで解析失敗していたはずですが、これで再度対応したつもりです。
2015/11/03:Twitterの仕様が変わって解析にいまいち失敗していたのを仮復旧。
<以下は2014年>
8/26:instagramに対応してみました。インスタグラム。
7/27:URLがTwitterのものだった場合、ツイートした人の名前とそのツイート内容を表示するようにしました。あとその結果文字コードをUTF-8にしなければならないことに気づきました。ウチでは表示フォントが変わってしまった‥‥
7/26:URL1件あたり0.3秒のウェイトを設定。Twitterが反応遅いんで10件で3秒プラスでも待てるでしょ。
7/13:このページへのリンク追加。
7/12:ついっぷるに対応しました。うちのTLにはなぜか多いので。
7/09:友人の協力によりいいね!ボタンがつきました。Facebook。
7/05:twitpicに対応した、と思います。本当に最大サイズかはいまいちギモンが。
7/04:「使い方」を開閉できるようにしました。javascriptの力だ!
7/03:サーバ無料試用期間終了に伴い7/01より止まっていましたが17時過ぎに復旧しました。サポートで作業しないといけないとかどうなのよMS。
6/22:Twitterが言うところのアニメーションGifにも一応対応しました。サムネイルとmp4へのリンクを出します。ジフじゃねーじゃねーかふざけんな!
6/15:マルチパートものツイートのリプライに画像URLが入っているとそれも表示してしまっていたのに対処。
6/14:ひとつのツイートに複数画像が入っているマルチパートものに対応しました。
6/11:はてブボタンをつけた
6/10:ツイートボタンをつけた
6/09:ツイッターでURLを公開
これが私の初Azureな一週間です
土曜日と日曜日でだいたい完成
テュリャテュリャテュリャテュリャテュリャテュリャリャ~ テュリャテュリャテュリャテュ~リャ~リャ~
金曜日も寝た
木曜日はテストで背景画像抽出成功
テュリャテュリャテュリャテュリャテュリャテュリャリャ~ テュリャテュリャテュリャテュ~リャ~リャ~
水曜日は寝た
火曜日にphpinfo()が動き
テュリャテュリャテュリャテュリャテュリャテュリャリャ~ テュリャテュリャテュリャテュ~リャ~リャ~
月曜日にFTPが繋がる
日曜日にAzureのアカウントを作り