0
1

More than 1 year has passed since last update.

7行のコードだけでTwitterのアイコン画像を変えるプログラム+自動更新もする

Last updated at Posted at 2021-09-26

どうも。なんか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以外に設定しないと失敗します!

.env
CK=""
CS=""
AT=""
ATS=""

image.png
そして、imgs/ディレクトリに変更したい画像を配置します。2枚以上画像を配置すると自動でランダムにどの画像をセットするかを選んでくれます!
あとはchange.phpを実行するだけ!簡単だと思います。

php change.php

これを定期実行する方法はコード解説の後に書いてます。

コード解説

change.phpのPHPコードはライブラリのおかげでたった8行で構成されています。

change.php
<?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。

/lib/systemd/system/changeicon.service
[Unit]
Description= ChangeIcon Service

[Service]
Type= oneshot
ExecStart= /usr/bin/php /<絶対パス>/change.php
/lib/systemd/system/changeicon.timer
[Unit]
Description= changeicon timer

[Timer]
OnUnitActiveSec=6h
# 上記の例では6時間おきに実行する設定です!
[Install]
WantedBy=timers.target

あとはApacheを実行するかのようなノリでsystemctl start changeicon.timerでタイマーを起動させれば勝手に指定したタイミングで自動実行してくれます!


以上是非参考にしてみてください。アイコンは全く違う物に変えると、誰だかわからなくなる可能性がありますので背景色を変えるくらいに下が良いと思います。
私のアカウントは6時間ごとに全自動でアイコン背景色を変えてます。ぜひ見てやってください。
rapture_20210926060156.png

Portfolioサイト | Twitter @ichii731

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1