FileMaker で Twitter に投稿する

現在 Raspberry Pi で Twitter bot を運用している。

Raspberry Pi + PHP で Twitter bot を作る – with a Christian Wife
https://wacw.cf/2018/02/15/twitterbot-with-php-on-pi/

しかしツイート内容を編集するには、Raspberry Pi 上のファイルを編集する必要があり面倒だった。自由度を持たせるには Mac の FileMaker を Twitter bot として使いたい。

いろいろ方法を研究してみて、あまりスマートとは言えないがいい方法を見つけた。この方法だとランダムな文章をツイートしたり、複数アカウントの切り替えもできたりする。常時起動する Mac が必要になるが、私は普段使いの Mac 以外に、サーバー用に 24 時間稼働している Mac があるので、それを使えばいい。

(1)Tw というコマンドラインから Twitter に投稿できるツールをインストールする。

Tw: Twitter client on Ruby.
http://shokai.github.io/tw/

Mac にもインストール可能だ。

インストール後 $ tw を実行するとブラウザが開くので数字を入力して認証する。ツイートするには $ tw こんにちは のようにコマンドを実行するだけでいい。

ツイートには毎回 Yn の確認が出てくるが –yes を付けることでそれをスキップできる。

2つ目のアカウントを追加するには $ tw --user:add を実行(事前にブラウザで追加したいアカウントにログインしておく)。ブラウザが開くので数字を入力して認証する。

以下のコマンドでユーザー一覧を確認できる。

$ tw --user:list

例えば wacw というユーザーで投稿するなら以下のようにする。

$ tw ユーザー2です。 --user=wacw

これで複数アカウントでツイートできるようになった。

参考:
Raspberry Pi の CUI から tw でツイートする | ε-ARK Project
http://www.e-ark.jp/2013/02/20/raspberry-pi-%e3%81%ae-cui-%e3%81%8b%e3%82%89-tw-%e3%81%a7%e3%83%84%e3%82%a4%e3%83%bc%e3%83%88%e3%81%99%e3%82%8b/

(2)FileMaker で「投稿テキスト」というテキストフィールドを作成する。

Perform AppleScript というスクリプトステップを作成。まずは Native AppleScript で以下のコマンドを実験してみよう。

1tell application "Terminal"
2activate
3do script with command "tw テスト --yes"
4end tell

これで Terminal が開いて Tw からの投稿が行われる。

投稿後に Terminal を閉じるなら以下のようにする(投稿に少し時間が掛かるので、3秒の delay を付けている)。

1tell application "Terminal"
2activate
3do script with command "tw テスト2 --yes"
4delay 3
5quit
6end tell

もしウィンドウだけ閉じるなら quit を close window 1 とすればいい。これで投稿後に Terminal のアクティブウィンドウが閉じられる。

「投稿テキスト」フィールドの内容をツイートするには、Perform AppleScript のオプションで Calculated AppleScript を選択。以下のように記述する。

1"tell application \"Terminal\""&¶&
2"activate" & ¶&
3"do script with command \"tw " & Table::投稿テキスト & " --yes\"" & ¶&
4"delay 3"&¶&
5"quit"&¶&
6"end tell"

これで FileMaker からツイートできるようになった。1で書いたようにユーザーを指定すれば指定したアカウントからの投稿も簡単だ。投稿のたびに Terminal が開くけれど、それは良しとしよう。

参考:
フリーなツールを使ってメールをFMProに取り込んでみる[後編]
http://www.fmpro.jp/contents/040080/report.html

AppleScript でターミナルを操作する | まくまくMacノート
https://maku77.github.io/mac/applescript/terminal.html

AppleScript でアプリケーションを起動・終了する – ObjecTips
http://koze.hatenablog.jp/entry/2015/05/26/000000

AppleScript でウィンドウを閉じる – ObjecTips
http://koze.hatenablog.jp/entry/2015/05/27/000000

ASH Planning: AppleScript でアプリケーションの起動と終了
http://ashplanning.blogspot.com/2016/02/activate-quit-applications.html

(3)FileMaker からツイートできるようになったところで、次はこれを定期的に実行したい。Keyboard Maestro を使う手もあるが、Mac の標準機能だけでやってみる。

参考:
Keyboard Maestro 8.2.4: Work Faster with Macros for macOS
https://www.keyboardmaestro.com/main/

(3-1)Automator を使って、FileMaker のスクリプトを実行するアプリケーションを作成する。

Automator を開き「File>New」で Application を選択し、Choose をクリック。

(3-2)Library から Run AppleScript を見つけ、右側へドラッグアンドドロップ。

(3-3)以下のスクリプトを書く。

1tell application "FileMaker Pro Advanced"
2	activate
3	open alias "[FileMaker のファイルへのパス]"
4	tell application "System Events" to keystroke "1" using {command down}
5end tell

FileMaker のファイルへのパスはシステムディスク名から始め、ディレクトリは /(スラッシュ)ではなく :(コロン)で区切る。

最後は keystroke で FileMaker のスクリプトを選択している(do script を使う方法は上手くいかなかった)。2で作成したスクリプトを実行するキーボードショートカットに合わせて数字の部分( "1" )を変更すればいい。

参考:
キーボードを操作できるApplescript | 戦業主夫
http://sengyoaruji.iinaa.net/20160603a.html

Complete list of AppleScript key codes
https://eastmanreference.com/complete-list-of-applescript-key-codes

Apple ScriptでFMのスクリプトを動かすには
http://mtlab.ecn.fpu.ac.jp/WSM_1998/981014160346.html

(3-4)スクリプトを保存する。app の拡張子のアプリケーションができあがる。

試しにダブルクリックして実行してみるとツイートできるはず。初回は Preferences>Security & Privacy>Privacy へのアプリの登録が求められるはず。

(3-5)cron へ 3-4 のアプリケーションを登録する。

$ crontab -e

例えば毎日 15 時にツイートするなら以下。

0 15 * * * open [ 3-4 のアプリケーションへのパス]

ツイートのたびに FileMaker や Terminal が開くことになるが、FileMaker で投稿内容を管理できると便利なので悪くないと思う。

参考:
Mac で nano エディタを使う – with a Christian Wife
https://wacw.cf/2019/03/01/nano-in-mac/

crontabでAppleScriptを定期的に実行する – ゆっくり技術ノート!
https://coro.hatenadiary.jp/entry/2014/03/27/214439

using crontab to run workflow apps i've created? | Mac Support
https://macosx.com/threads/using-crontab-to-run-workflow-apps-ive-created.290932/