LoginSignup
1
1

More than 5 years have passed since last update.

iTunesで再生中の曲の情報をツイートするアプリを作った

Posted at

初めての試みだったのでざっくりと調べてみると、
AppleScriptで書いてみるのが良さそうだったので、AppleScriptに挑戦することにしました。

ツイートするテキストの作成

iTunesから再生中の曲の情報(曲名とアーティスト名)をとってきて、それらを連結します。

tell application "iTunes"
    set trackName to name of current track
    set trackArtist to artist of current track
end tell

set tweetText to trackName & " by " & trackArtist

めちゃくちゃ簡単ですね!

あとは、140字以内に収まるように調整します。

if length of tweetText > 134 then
    set tweetText to text 134 thru 1 of tweetText & "..."
end if

ツイート方法を考える

iTunesから曲の情報をとってくるのは簡単にできたのですが、
ツイートするのが一筋縄ではいかず、
できるだけ手間をかけずに作りたいな〜と思い、いくつかの案を考えました。

少し長いので、飛ばす方は「ツイート機能の実装」までどうぞ!

案1 - ”インターネットアカウント”に紐付けたアカウントを利用する

Mac自体に紐付いたアカウントを利用するのは安全で至極当然だと考えました。
”インターネットアカウント”についてはこちらを参照。

しかし調べてもAppleScriptからインターネットアカウントにアクセスする方法がわからず断念…。

案2 - Twitter Scripterを使う

「AppleScript twitter」などというワードで調べてみると、
Twitter Scripterというアプリを使ってツイート機能を実現してる記事が多く見つかりました。
当該アプリが、インターネットアカウントに紐付けたアカウントとAppleScriptの橋渡しをしてくれるので、
AppleScriptでは当該アプリに向けてツイートや検索などの命令を行います。

直感的でわかりやすいのですが、できればサードパーティに頼りたくない(リスクをとりたくない)ので、今回は見送りました。
ただ、お試し用アカウントで連携してみる分には適切な選択肢だと思います。

案3 - Twitter APIを直接叩く

(調べてませんが多分できると思います…。)
Twitterにアプリ登録をしなくてはならないので、すぐにやめました。
お試し用でアプリ登録するのはなんか違うなあと。

案4 - ChromeでツイートURLを開き投稿する【採用】

ChromeでTwitterにログインしている前提ですが、
ツイートURLにツイートするテキスト(とハッシュタグ)を付与して、
それをChromeで開き、投稿ボタンを押してウィンドウを閉じる、という案です。

これなら、新しくアプリを入れる必要はないですし、Twitterにアプリを登録する必要もないので、
すぐに着手できるなと思い、この案を採用しました。

ツイート機能の実装

開くURLの生成する

単に文字列を連結するだけです。
これも簡単ですね。

on createTweetUrlFromTweetText(tweetText)
    return "https://twitter.com/intent/tweet?text=" & tweetText & "&hashtags=nowplaying"
end createTweetUrlFromTweetText

ChromeでツイートURLを開く

これ以降は以下のスコープ内でのコードとなります。

tell application "Google Chrome"
    -- この中のコード
end tell

新しいウィンドウを開いて、開いたアクティブなタブにURLをセットします(開きます)。

make new window
set URL of active tab of window 1 to tweetUrl

動作確認したのは、すでにウィンドウを一つ開いている状態だったので、
他の状態(ウィンドウを開いていない状態、等)では考慮が必要かもしれません。

ローディングの完了を待機する

タブ開いた直後は投稿ボタンを押せないこともあるため、
ページのローディングが完了するのを待ちます。

repeat until (loading of active tab of window 1 is false)
end repeat

ディレイで指定時間だけ待つのも簡単で良いですが、
ローディング速度に依らない処理にして安定性を高めました。

投稿ボタンをクリックする

Chrome上で投稿ボタンを探してクリックするJavaScriptを実行します。
探し方(セレクターの指定方法)は他にもあると思うのでお好みで。

execute active tab of window 1 javascript "document.getElementsByClassName('button selected submit')[0].click();"

かなりお手軽にJSを実行できるので、他にも色々ハックできそうです。

投稿完了を待機してタブ(ウィンドウ)を閉じる

ページのローディング時と同様に、投稿完了を待ってからウィンドウを閉じて処理を終えます。

repeat until (loading of active tab of window 1 is false)
end repeat

close active tab of window 1

最後に

初めてのAppleScript作成でしたが、
最終的にアプリケーションにするまであまり躓くことなく進められました!
書き方も機能へのアクセスも直感的でわかりやすいのが良いですね。
ググったら情報がチラホラ出てくるのも助かりました。

スクリプト全体と参考にしたサイトはこのGistにまとめたので、興味があればご覧ください。

1
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
1
1