pythonでアレクサに好きな情報を好きなように喋らせたい　-２．iphoneを活用すれば大体なんとかなる編-

この前、地元でうなぎ祭りをしていたそうです。
大変ご立派な高級うなぎを弁当にして、安売りしていたそうな。

あぁ・・・。
・・・・。
・・・・。
・・・そんなイベントあること知ってたら絶対に参加していたのに。

人生は後悔の不連続。離散的な不幸は常に前触れなく発生し、気持ちを一気に落とさせます。
うなぎ、たべたかった―――……

＊＊＊＊＊＊
＊＊＊＊＊
＊＊＊＊
＊＊＊
＊＊
＊

やり直したい過去があまりにも多いので、アレクサを活用しようと思います。

ニュースを出力してくれるサービスは、
メルマガ、ブログ、RSS、twitter、スクレイピングと昔から色々ありました。
しかし私のようなだらしない人は、いくらニュースを見ようと思っても、
習慣が身につかないのでニュースを全く見ません。

そこでアレクサを活用しようと思います。
アレクサに「おはよう』と言ったら、朝の挨拶とともに朝の情報を教えてくれる。
私生活のなかに自然と組み込めるアレクサは本当に素晴らしいデバイスです！

ということでこの記事では、
好きな情報を調べて好きなようにアレクサに喋ってもらうことを目標に遊んでみます。

#今回の方針

https://qiita.com/akaiteto/items/367ca608de93836e300e
前回の記事ではスキル開発で好きなように作ってみましたが、
申請が却下されたので、スキル開発の方針は諦めました。

今回の目次は以下のとおりです。
やってることはかなり単純です。プログラミングの知識がなくてもなんとかなります。

```
2.iphone×pythonista×ショートカットを踏み台にして好きな情報を喋らせる！
  2-1.アレクサのメール読み上げスキルを活用！
      △ わりとつかえる！でも読み上げてくれる件数が少ない・・・
  2-2.アレクサのTwitter読み上げスキルを活用！
      △ わりとつかえる！でも読み上げてくれる件数が少ない・・・
      　　twitterのAPIの申請をやってもいいなら2-1より組むのが楽。
  2-3.余談：Siriで好きな情報を喋らせてみる
```

#1.環境
できるだけ手軽にやりたいので全部iosでやってみます。
環境は以下のとおりです。

##○デバイス
#####ios端末。
下記記載したアプリが入れば問題なし。
（iphone6とかよっぽど古いものじゃないなら実行できる）
#####アレクサ
わたしは第３世代のEchoDot。

##○アプリ
#####ショートカット（デフォルトでインストール済み）
言わずとしれた自動化アプリ。ios上の手順を自動化できます。
標準アプリなのでデフォルトで入ってる。

#####オートメーション（デフォルトでインストール済み）
タスクスケジューラのようなもの。設定したショートカットを定期実行します。
単体のアプリはなく、ショートカットのいち機能として用意されています。
ちなみに、iphoneにパスワードがかかっていると自動で実行されません。（重要）
https://appllio.com/ios-passcode-time-iphone-ipad-12694
私の場合、パスワード要求時間を変更して使っています。

#####pythonista
言わずとしれた神アプリです。１２００円しますが、それでも安いくらいだと個人的には思います。
https://apps.apple.com/jp/app/pythonista-3/id1085978097
pipコマンドを実行できるので、下記手順で入れておくのがおすすめです。
https://note.com/rikureate/n/n810a07fe8243

ニュース系の取得で使いそうなbeautifulsoup4や、
以降の記事に記載するclipboardのライブラリは最初から入っているので、
デフォルトの状態のままでこの記事の処理はほとんどすべて実行できます。
なお、twitter操作についてはAPIの設定とpipの実行が必要です。

##○その他
この記事では、メールでの読み上げとtwitterでの読み上げの２つを用意しています。
それぞれ必要なものが異なるので、以下にそれぞれ記載します。
###【メール読み上げで必要なもの】
####outlookのメールアカウント
https://www.amazon.co.jp/%E6%8C%81%E7%94%B0-%E5%BE%B9-%E9%9F%B3%E5%A3%B0%E3%83%A1%E3%83%BC%E3%83%ABM/dp/B079KQ58YT
メールを読み上げてくれるスキルは日本のストアの現時点だとoutlook限定のスキルしかありません。
outlookのメールの準備が必要です（無料）

###【twitter読み上げで必要なもの】
下記のスキルで読み上げを行います。
https://www.amazon.co.jp/Nakano-Hitoshi-%E9%9D%92%E3%81%84%E9%B3%A5%E3%81%AE%E3%81%95%E3%81%88%E3%81%9A%E3%82%8A-Twitter%E8%AA%AD%E3%81%BF%E4%B8%8A%E3%81%92%E3%82%B9%E3%82%AD%E3%83%AB/dp/B07GXC2ZZ9
####twitterのアカウント
情報をつぶやかせるアカウントが必要です。
####api化の申請
twitterアカウントをスクリプトで操作するには、APIキーとトークンが必要です。
「twitter APIキー　トークン　取得」とかで検索すると、
手順を説明している方がたくさんいるので詳細はそちらを参照。
twitterはちょくちょく手順を変えたりレイアウトを変えたりしているので、
記事の日付には注意が必要かもしれません。

流れの概要としては、
１．https://developer.twitter.com/en/apps/ でAPIの申請を行う。
　　なんのために作るの？とか色々英語で聞かれるので英語で答える。
２．申請通るとメールで「申請通ったよー」とメールが来る。
３．https://developer.twitter.com/en/portal/dashboard
　　とりあえず上記の管理ページに飛ぶ
４．ページのどこかに有るアプリ作成ページに飛ぶ
　　https://developer.twitter.com/en/portal/apps/new
５．アプリを作るとようやく必要なキー情報が手に入る
　　Consumer KeysとAuthentication Tokensを取得してメモっておく。
　　

#2.アレクサのメール読み上げスキルを活用！
##流れ
流れは以下のとおりです。
一言で言えば、pythonistaで情報調べさせてメール通じてアレクサに喋らせよう、という話です。

```
#データ取得
1.「オートメーション:データ取得」でショートカットを起動
2.ショートカットより、「pythonista3」を起動
3.スクレイピング等で情報を取得。文字列をクリップボードにコピー

#メール送信
5.「オートメーション:メール送信」でショートカットを起動
6.ショートカットより、クリップボードの内容を取得してメールを送信

#アレクサ反映
7.アレクサにメールを読み上げてもらう
```

これを実行するために必要な準備は以下の通り。

```
1.ソース作成　：pythonista
2.ショートカット作成　：pythonista実行用
3.ショートカット作成　：メールを送信する
4.オートメーション作成：ショートカットを定期実行
5.アレクサのスキルの準備
```

##準備
###1.ソース作成　：pythonista
まずpythonistaを起動させます。
画面としてはこんな感じ。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/add1a130-66f1-08c1-be48-022a5442738e.png" width=30%>
情報収集用のソースを作成しエディタに貼り付けます。
スクレイピングのやり方については、もはや擦り切れるほどに使い古されたネタなので割愛します。

```test.py
import clipboard
def getNews()
    #ニュースを取得したい関数を作成
    return ["ニュース１","ニュース２"]
info = getNews()
info = '\n'.join(info)
clipboard.set(str(info))
```

ニュース情報を文字列で取得したあと、クリップボードにコピペさせます。
クリップボードにコピペさせる理由は、ios内の他アプリに連携させるための変数代わりに使うためです。

また、各ニュースをjoin関数で改行つなぎにしている理由は、
ニュースごとにメールを分けて送信したい、という個人的な理由です。
詳細は「2.ショートカット作成　：メールを送信する」で記載しますが、
区切り文字として改行を検知して、改行ごとにメールを送るための準備となっています。


###2.ショートカット作成　：pythonista実行用
ではショートカットを作成・・・の前に。
なぜショートカットでpythonistaを起動しないといけないのか？について一応説明します。

つまるところ、この記事で最も達成したい目標は、ニュース取得処理を定期実行させることです。
これをiosで実現しようとすると、オートメーションの機能を使わないと行けないのですが、
オートメーションを使うにはショートカット越しでないと処理が実行できません。
それがショートカット越しでpythonistaを実行する理由の１つです。
また、後述する別のショートカットでは、メールアプリとpythonistaの連携を行うのですが、
情報を変換したりするのにショートカットがどうしても必要になることも理由の１つです。

・・・
・・
・
ということで、pythonistaのスクリプトを実行するショートカットを作りましょう。
ショートカットとは、Ctl+Zのようなショートカット・・・ではなく、手順を自動化させるios標準のアプリです。

まず、右上のボルト締めみたいなアイコンをクリックします。
すると下記画面が表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/1b637c77-c263-701e-911e-d105e4e69dc2.png" width=30%>

「Pythonista URL」を選択。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/1fbb1101-c34f-de0a-cdc0-90299f0271ee.png" width=30%>

そして、URLをコピーします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/f9e78e62-5b3d-ad3a-feab-44566cbbde66.png" width=30%>
コピーされるURLは「pythonista3://xxxxx.py/?action=run」というアドレスです。
URLというとインターネットのURLを連想しますが、iosではURLでアプリの起動を行うことができます。
ショートカットのアプリでは、このURLを開くことで外部アプリを動かします。

ということで、実際にショートカットを設定しましょう。

ショートカットのアプリを起動->新規でショートカットを作成を選択します。
それから表示された画面で「＋」を押して、実際のアクションを追加します。
下記がアクション追加画面です。ここでは「web」を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/18a34f43-8b30-7d09-23aa-1aa1c39ed69c.png" width=30%>

そしてURLを開くを選択。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/c09dc385-3a4f-ddb0-a35c-041db4fd8ec9.png" width=30%>

これでアクションが追加されました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/9ee0dd42-fce6-de31-878d-3c08fa5adea8.png" width=30%>

余談ですが、このようなめんどくさいことしなくても、
ショートカット->アクションの追加からpythonistaを選択することで
簡単に追加できます。（先にかけ）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/737e9434-10fb-c5ec-339b-89a38a799e73.png" width=30%>

###3.ショートカット作成　：メールを送信する
さて続けて、メールを送信するショートカットを作りましょう。
「流れ」の節にも書きましたが、基本的な流れとしては
pythonistaで取得したニュースをコピペして、
コピペした内容をメールで送るようにします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/45e93602-5a5b-72fd-f18d-73b8f614cd15.png" width=30%>

アクションを追加して上記のものを作成して下さい。

処理内容の概要としては、クリップボードに入った文字を
改行ごとに分解してメールを送るという内容になっています。

もう少し詳しく言うと、
クリップボードには、「2.ショートカット作成　：pythonista実行用」を実行したあとに格納されるニュースの情報が
入っている想定です。サンプル通りのプログラムなら、下記の通り改行で文字がコピーされています。

```
ニュース１
ニュース２
```

これを行ごとに送るのがこのショートカットとなります。


###4.オートメーション作成：ショートカットを定期実行
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/f4362220-5aab-762e-3de7-4e9541a2067f.png" width=30%>
ショートカットアプリを起動させ、下部のオートメーションを選択します。

そして、
「2.ショートカット作成　：pythonista実行用」を実行したあと、
「3.ショートカット作成　：メールを送信する」を実行します。
状態としては、画像の通り２つのショートカットが並んでいる状態です。

「なんで２つのショートカットにわけてるの？１つでよくない？」
と思われると思いますが、
アプリの仕様なのか、一度pythonistaで別アプリに飛んでしまうと、
ショートカットのそれ以降に記載した処理が実行されません。
pythonista起動後、手動でショートカットアプリを開き直さないといけません。

１つのショートカットですべてまとめると、別アプリを呼び出しに言ったあとに
手動作業が発生するため、ショートカットを分けています。

###5.アレクサのスキルの準備
この記事では、
https://www.amazon.co.jp/%E6%8C%81%E7%94%B0-%E5%BE%B9-%E9%9F%B3%E5%A3%B0%E3%83%A1%E3%83%BC%E3%83%ABM/dp/B079KQ58YT
というアプリを使います。アレクサアプリからスキルを有効にしましょう。
アカウントリンクには、「3.ショートカット作成　：メールを送信する」で設定したメールを
設定して下さい。
なお、このスキルではoutlook限定なので注意が必要です。

##実行
あとは、「4.オートメーション作成：ショートカットを定期実行」で
設定した時刻にショートカットが勝手に動いてくれます。
渡しの場合、夜中にオートメーションを起動して、
朝、アレクサにおはようの挨拶とともにメールを読み上げてもらうようにしています。


#3.アレクサのTwitter読み上げスキルを活用！
ここでやることは要するに、iphoneにtwitterのbotをやらせようという話です。
##流れ
```
#データ取得
1.「オートメーション:twitter」でショートカットを起動
2.ショートカットより、「pythonista3」を起動
3.調べた情報をスクリプトでtwitterにつぶやかせる

#アレクサ反映
7.アレクサにtwitterを読み上げてもらう
```

これを実行するために必要な準備は以下の通り。

```
1.ソース作成　：pythonista
2.ショートカット作成　：pythonista実行用
3.オートメーション作成：ショートカットを定期実行
4.アレクサのスキルの準備
```

##準備
##1.ソース作成　：pythonista

```test.py
import twitter
def getNews()
    #ニュースを取得したい関数を作成
    return ["ニュース１","ニュース２"]

# 取得したキーとアクセストークンを設定する
auth = twitter.OAuth(consumer_key='自分のやつ',
                  consumer_secret='自分のやつ',
                  token='自分のやつ',
                  token_secret='自分のやつ'
                  )
tw = twitter.Twitter(auth=auth)
info = getNews()
        
for news in info:
    # twitterへメッセージを投稿する
    tw.statuses.update(status=news)
```

##2.ショートカット作成　：pythonista実行用
「1.twitter読み上げスキルで好きなことを喋らせよう！」と一緒

##3.オートメーション作成：ショートカットを定期実行
「1.twitter読み上げスキルで好きなことを喋らせよう！」と一緒。
なお、ここではショートカットは１つでよい。

##4.アレクサのスキルの準備
https://www.amazon.co.jp/Nakano-Hitoshi-%E9%9D%92%E3%81%84%E9%B3%A5%E3%81%AE%E3%81%95%E3%81%88%E3%81%9A%E3%82%8A-Twitter%E8%AA%AD%E3%81%BF%E4%B8%8A%E3%81%92%E3%82%B9%E3%82%AD%E3%83%AB/dp/B07GXC2ZZ9
上記スキルを有効にして、アカウントリンクも行う。

##実行
いい感じに喋ってくれました。

#2-3.余談：Siriで好きな情報を喋らせる
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581710/8bd6fdc6-5998-454c-0539-40ba04696178.png" width=30%>
あまり知られていない機能ですが、
iosではSiriに好きな言葉を読み上げさせることができます。
pythonistaで今までの手順と同じようにニュースをクリップボードにコピーして読み上げさせてみました。
結果は、アレクサと比べるとどうしても音声合成の品質が違くて、
長文にはちょっと使えなさそうだなーという印象でした。

#結論
さて、ここまで丁寧に色々解説してきましたが、
結論を言うと、２０２１年７月時点でこれをやると・・・・
ちょーーーーーーーっとだけ、満足行かない結果になりました。

というのも、本記事ではメール読み上げとtwitter読み上げスキルを活用したのですが、
読んでくれる文字数と件数がとてもとても少ない。

大量の文章を読ませるには少し満足行かない結果になりました。

が、それでも、
毎日のニュースは無理でも、ちょっとした新着情報を喋らせる文には十分だなと思います。
iphoneで手軽にスクリプトを修正できるのも楽です。
冒頭のうなぎ祭りのようなローカル情報を知らせてくれるのには、
これで十分活躍してくれそうです。

#今後？
正直、私がやりたいことはこの記事のやつでできてしまっているので、
ここから発展させてやりたいことはあまりないです。
ただ、海外のスキルを試すことにはとても関心があります。

日本のスキルはあまり開発が盛んじゃないようですが、
海外は開発がとても盛んなようです。

外部連携周りで良さげな海外スキルがないか、いつか調べてみたいですねいつか。

それでは