目次
サンプル・プログラム:実行例(バナー画像あり)

サンプル・プログラム
onairAnime.php | サンプル・プログラム本体。 |
pahooTwitterAPI.php | Twitter APIを利用するクラス pahooTwitterAPI。 使い方は「PHPでTwitterに投稿(ツイート)する」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
1.0 | 2021/06/06 |
バージョン | 更新日 | 内容 |
---|---|---|
5.5.0 | 2024/06/21 | TwitterOAuth 7.0.0 対応 |
5.4.0 | 2024/05/18 | twitter.com → x.com 変更対応 |
5.3.0 | 2023/08/15 | tweet3() -- メディアのシャフル機能 |
5.2.1 | 2023/07/22 | bug-fix |
5.2.0 | 2023/07/17 | oembed() v2対応 |
準備:pahooTwitterAPI クラス
11: //TwitterOAuth クラスをロードする.
12: $version = explode('.', phpversion());
13: if ($version[0] >= 8) {
14: require __DIR__ . '/vendor/autoload.php';
15: }
16: use Abraham\TwitterOAuth\TwitterOAuth;
17:
34: /**
35: * コンストラクタ
36: * @param なし
37: * @return なし
38: */
39: function __construct() {
40: $this->responses = array();
41: $this->webapi = '';
42: $this->error = FALSE;
43: $this->errmsg = '';
44: $this->errcode = 0;
45:
46: $this->connection = new TwitterOAuth($this->TWTR_CONSUMER_KEY, $this->TWTR_CONSUMER_SECRET, $this->TWTR_ACCESS_KEY, $this->TWTR_ACCESS_SECRET);
47: //v2使用を宣言
48: $this->connection->setApiVersion('2');
49: }
27: //OAuth用パラメータ
28: // https://apps.twitter.com/
29: var $TWTR_CONSUMER_KEY = '***************'; //Cunsumer key
30: var $TWTR_CONSUMER_SECRET = '***************'; //Consumer secret
31: var $TWTR_ACCESS_KEY = '***************'; //Access Token (oauth_token)
32: var $TWTR_ACCESS_SECRET = '***************'; //Access Token Secret (oauth_token_secret)
33:

事前にプログラムを登録しておく必要があり、その方法は「Twitter API - WebAPIの登録方法」を参照されたい。入手したパラメータを、上述の変数に代入しておくこと。
PHP の https対応
関数 phpinfo を使って、下図のように表示されればOK。


Windowsでは、phop.iniの下記の行を有効化する。
extension=php_openssl.dll

Linuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順

これで準備は完了だ。
解説:初期値
21: //プログラム・タイトル
22: define('TITLE', '放映中のアニメ一覧');
23:
24: //表示幅(ピクセル)
25: define('WIDTH', 600);
26:
27: //バナー画像を表示するかどうか(TRUE:表示する)
28: define('BANNER', FALSE);
29:
30: //Spinner - jQuery UI を使用するかどうか(TRUE:使用する)
31: define('USESPINNER', TRUE);
32:
33: //Twitter API クラス:include_pathが通ったディレクトリに配置
34: if (BANNER) {
35: require_once('pahooTwitterAPI.php');
36: }

定数 BANNER を TRUE にすることで、そのアニメのTwitterバナー画像を表示できるようにする。TRUE にすることで、Twitter APIを利用するクラス pahooTwitterAPI を利用するようになるので、後述する Twitter API クラス を参照のこと。
定数 USESPINNER を TRUE にすることで、数値選択のための Spinner - jQuery UI が利用できるようになる。
ShangriLa Anime API
URL |
---|
https://api.moemoe.tokyo/anime/v1/master/:year/:cours |
フィールド名 | 要否 | 内 容 |
---|---|---|
year | 必須 | 西暦年 |
cours | 必須 | クール(1~4) |
Twitter API:GET users/profile_banner
15分間に180回という呼び出し制限があるが、今回のプログラムでは、この制約の影響を受けることはないだろう。
URL |
---|
https://api.twitter.com/1.1/users/profile_banner.json |
フィールド名 | 要否 | 内 容 |
---|---|---|
user_id | user_id または screen_name のどちらか必須 | ユーザーID |
screen_name | スクリーンネーム |
放映中のアニメ一覧
265: /**
266: * HTML BODYを作成する
267: * @param int $year 西暦年
268: * @param int $cours クール(1~4)
269: * @param array $items 応答情報
270: * @param string $webapi WebAPIのURL
271: * @param string $errmsg エラーメッセージ
272: * @return string HTML
273: */
274: function makeCommonBody($year, $cours, $items, $webapi, $errmsg) {
275: if (BANNER) {
276: //オブジェクト生成
277: $ptw = new pahooTwitterAPI();
278: }
279:
280: $myself = MYSELF;
281: $refere = REFERENCE;
282: $width = WIDTH;
283: $title = TITLE;
284: $version = '<span style="font-size:small;">' . date('Y/m/d版', filemtime(__FILE__)) . '</span>';
285: $width_image = (int)WIDTH / 3;
286: $debug = $table = '';
287:
288: //デバッグ情報
289: if (! FLAG_RELEASE) {
290: $phpver = phpversion();
291: $debug =<<< EOT
292: <p>
293: <span style="font-weight:bold;">★デバックモードで動作中...</span><br />
294: PHPver : {$phpver}<br />
295: WebAPI : <a href="{$webapi}">{$webapi}</a>
296:
297: EOT;
298: }
299:
300: //エラーメッセージ
301: if ($errmsg != '') {
302: $errmsg =<<< EOT
303: <p style="color:red">
304: エラー:{$errmsg}.
305: </p>
306:
307: EOT;
308: } else if (count($items) > 0){
309: if (BANNER) {
310: $label = "<th>バナー画像</th>\n";
311: } else {
312: $label = '';
313: }
314: $table =<<< EOT
315: <table class="plists">
316: <tr>
317: <th>作品名</th>
318: <th>Twitterアカウント<br />ハッシュタグ</th>
319: {$label}
320: </tr>
321:
322: EOT;
323: $cnt = -1;
324: foreach ($items as $key=>$val) {
325: //タイトル+公式サイト
326: if (isset($val->public_url) && ($val->public_url != '')) {
327: $anime = "<a href=\"{$val->public_url}\">{$val->title}</a>";
328: } else {
329: $anime = $val->title;
330: }
331: //Twitterアカウント+バナー画像
332: if (isset($val->twitter_account) && ($val->twitter_account != '')) {
333: $twitter = "<a href=\"https://www.twitter.com/{$val->twitter_account}/\">@{$val->twitter_account}</a>";
334: if (BANNER) {
335: $image = $ptw->profile_banner($val->twitter_account);
336: if ($image != FALSE) {
337: $image = "<td><img style=\"width:{$width_image}px;\" src=\"{$image}\" /></td>";
338: } else {
339: $image = '<td> </td>';
340: //エラー・リセット
341: $ptw->error = FALSE;
342: $ptw->errmsg = '';
343: $ptw->errcode = 0;
344: }
345: } else {
346: $image = '';
347: }
348: } else {
349: $twitter = '';
350: if (BANNER) {
351: $image = '<td> </td>';
352: } else {
353: $image = '';
354: }
355: }
356: //Twitterハッシュタグ
357: if (isset($val->twitter_hash_tag) && ($val->twitter_hash_tag != '')) {
358: $hashtag = "<br /><a href=\"https://twitter.com/search?q=%23{$val->twitter_hash_tag}\">#{$val->twitter_hash_tag}</a>";
359: } else {
360: $hashtag = '';
361: }
362:
363: $table .=<<< EOT
364: <tr>
365: <td>{$anime}</td>
366: <td>{$twitter}{$hashtag}</td>
367: {$image}
368: </tr>
369:
370: EOT;
371: }
372: $table .= "</table>\n";
373: } else {
374: $table = '';
375: }
376:
377: $html =<<< EOT
378: <body>
379: <h2>{$title} {$version}</h2>
380: <form name="myform" method="get" action="{$myself}">
381: 西暦年 <input name="year" id="year" type="text" size="3" value="{$year}" />
382: クール <input name="cours" id="cours" type="text" size="2" value="{$cours}" />
383: <input name="exec" id="exec" type="submit" value="検索" />
384: <input name="reset" id="reset" type="submit" value="リセット" />
385: </form>
386: {$errmsg}
387: {$table}
388:
389: <div style="border-style:solid; border-width:1px; margin:20px 0px 0px 0px; padding:5px; width:{$width}px; font-size:small; overflow-wrap:break-word; word-break:break-all;">
390: <h3>使い方</h3>
391: <ol>
392: <li>[<span style="font-weight:bold;">西暦年</span>]を選択してください.</li>
393: <li>[<span style="font-weight:bold;">クール</span>](1~4)を選択してください.</li>
394: <li>[<span style="font-weight:bold;">検索</span>]ボタンを押してください.</li>
395: <li>[<span style="font-weight:bold;">リセット</span>]ボタンを押すと,初期化します.</li>
396: </ol>
397: ※参考サイト:<a href="{$refere}">{$refere}</a>
398: {$debug}
399: </div>
400: </body>
401:
402: EOT;
403: if (BANNER) {
404: //オブジェクト解放
405: $ptw = NULL;
406: }
407:
408: return $html;
409: }

応答結果をHTMLのTABLEタグに変換する。
応答結果のTwitterアカウントが消滅している場合もあるので、このときはエラー・リセットのために pahooTwitterAPI クラスを再オブジェクト化している。
参考サイト
- ShangriLa Anime API
- API Overview:Twitter公式
- 各種WebAPIの登録方法 - TwitterAPI:ぱふぅ家のホームページ
- PHPでTwitterに投稿(ツイート)する:ぱふぅ家のホームページ
(2024年6月21日)TwitterOAuth 7.0.0 対応