どうも。なんかTwitterをインタラクティブに活用したいなと思ってTwitterのユーザーアイコンを定期的に変更するプログラムを作りました。
…と言っても既存にあるかもしれませんが調べるくらいなら書いたがいいだろって感じでなるべく短くPHPで書きました。
※プログラムとか良く分からない人でも使えるよう配慮はしたつもりです。
サンプルコード&設定手順
まず以下のリポジトリのReleaseからTwitter_IconChange.zip
を落としてください。
次に**composer install
**を実行してください。Compser環境必須。
DLしたら.env.example
を.env
にリネームして環境変数にTwitterの開発者キーをセットしてください。
CKにはAPI Key・CSにはAPI Secretのキーを入力、ATにはAccess Token・ATSにはAccess Token Secretをそれぞれ入力してください。
なお、TwitterAPIのパーミッションをRead Only以外に設定しないと失敗します!
CK=""
CS=""
AT=""
ATS=""
そして、**imgs/
**ディレクトリに変更したい画像を配置します。2枚以上画像を配置すると自動でランダムにどの画像をセットするかを選んでくれます!
あとはchange.php
を実行するだけ!簡単だと思います。
php change.php
これを定期実行する方法はコード解説の後に書いてます。
コード解説
change.php
のPHPコードはライブラリのおかげでたった8行で構成されています。
<?php
require('vendor/autoload.php');
use Abraham\TwitterOAuth\TwitterOAuth;
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$connection = new TwitterOAuth($_ENV['CK'], $_ENV['CS'], $_ENV['AT'], $_ENV['ATS']);
$img_arr = glob('imgs/*');
$connection->post('account/update_profile_image', ['image' => base64_encode(file_get_contents($img_arr[array_rand($img_arr, 1)]))]);
1・2行目でComposerから取ったパッケージを読み込みます。
3・4行目で環境設定ファイルの.env
をphpdotenvっていうパッケージを使って読み込みます。
※なんで直接PHP上でセットしねぇんだよと思うかもしれませんがプログラムわからない人でも使えるようにしたかったからです…(でも結局いらなかったな)
5行目でTwitterOauthに認証を通すためのインスタンスを作成
6行目でimgsディレクトリ内の画像のパスを配列取得・7行目でaccount/update_profile_image
エンドポイントに画像をぶん投げます。以上!
ハマったポイント
最初、単純にpost送信してたのだがうまくいかない…
う~んと悩みまくって10分。**twitteroauthのIssueにbase64でエンコードしろと書いてありました。**やはりGithub偉大なり
base64_encode(file_get_contents($img_dir));
自動的に更新させるには
自動でアイコン変更を行うにはやはり定期実行がベストでしょう。てかそれ以外無い。
最近の若者はもうCronを使わない。時代はsystemd.timerという話をどこかで聞いたことがあるので最近はより自由に設定できるのでそっちを使います。
※私は一応若者の部類です(18 year)
まずは以下の2ファイルを配置します。コードはさっきのリポジトリに同梱したのでコピペするだけでOK。
[Unit]
Description= ChangeIcon Service
[Service]
Type= oneshot
ExecStart= /usr/bin/php /<絶対パス>/change.php
[Unit]
Description= changeicon timer
[Timer]
OnUnitActiveSec=6h
# 上記の例では6時間おきに実行する設定です!
[Install]
WantedBy=timers.target
あとはApacheを実行するかのようなノリで**systemctl start changeicon.timer
**でタイマーを起動させれば勝手に指定したタイミングで自動実行してくれます!
以上是非参考にしてみてください。アイコンは全く違う物に変えると、誰だかわからなくなる可能性がありますので背景色を変えるくらいに下が良いと思います。
私のアカウントは6時間ごとに全自動でアイコン背景色を変えてます。ぜひ見てやってください。