指定したユーザーのツイートをしゃべるRaspberry Piの作り方

#はじめに
第三回研究室内ハッカソンが行われました。他のメンバーの[記事1](https://qiita.com/Rtakaha/items/63b54c45c9e544ac878e)、[記事2](https://qiita.com/mitsu09/items/156e6de5cd19d33c1ab2)
今回は、ツイートを喋るRaspberry Piを作ることに決めました。
作成動機は、以前ラズパイの初期設定を初めて行った際に参考にした[記事](https://liginc.co.jp/261317)に、ツイートを大声でしゃべるラズパイのことが書かれていました。それを読んだ時、研究室にいる**ツイ廃**のツイートをしゃべるラズパイをいつか作ってみたいと感じたからです。
今回、参考にした**[記事](https://slideship.com/users/@sugita/presentations/2017/07/Xk9GkKijH2EtErPE7SD1AF/)**

#準備したもの
- Raspberry Pi 2 + WiFiドングル
- Raspbian のインストールされたmicroSD
- 電源アダプタ
- 普通のイヤホン（スピーカー用）
- キーボードとマウスとディスプレイ

#スピーカーのチェック
###スピーカーの音をチェック

```console
$ speaker-test -t wav
```

`Ctr + C`で音を止めることができます。
この時、HDMIで接続したディスプレイから音が出たので、イヤホン（仮想スピーカー）から音を出すために

```console
$ amixer cset numid=3 1
```
と入力することでHDMI出力からアナログ出力に変換でき、スピーカーから音を流すことができます。
###音量の調節

```console
$ alsamixer
```
#OpenJtalk（音声合成ソフト）のインストール
###OpenJtalkとは
- オープンソースの音声合成エンジン
- OpenJtalkに喋らせるには以下が必要
    - しゃべる内容が書かれたテキスト
    - 辞書フォルダ
    - 音声ファイル
- OpenJtalkの標準音声
    - nitech_jp_atr503_m001.jhtsvoice（男性の声）
###OpenJtalk・辞書音声データをインストール

```console
$ sudo apt-get update
$ sudo apt-get install open-jtalk 
$ sudo apt-get install open-jtalk-mecab-naist-jdic 
$ sudo apt-get install htsengine libhtsengine-dev 
$ sudo apt-get install hts-voice-nitech-jp-atr503-m001
```
途中で「続行しますか[Y/n]?」というメッセージが表示されたら、「Y」を打ち込んで「Enter」キーを押してインストールを続行します
###jtalk.shの作成
次に、OpenJtalkを動かすスクリプトを作成していきます。

```sh:jtalk.sh
#!/bin/sh
tmpfile=/tmp/jtalk.wav
htsvoice="/usr/share/hts-voice/\
nitech-jp-atr503-m001/\
nitech_jp_atr503_m001.htsvoice"
echo "$1" | open_jtalk \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-m $htsvoice \
-ow $tmpfile && \
aplay --quiet $tmpfile
rm $tmpfile
```
作成したスクリプトに実行権限を与えます。

```console
$ chmod 755 jtalk.sh
```

コマンドラインで以下をテスト

```console
$ ./jtalk.sh こんにちは
```
スピーカーから「こんにちは」と聞こえればOK!
#Twitter API アクセストークンを取得
下記のURLからtwitterにログインする。
[https://apps.twitter.com/](https://apps.twitter.com/)
1. 「create an Apps」をクリック
2. 必要な項目を入力（適当で大丈夫らしい）
<img width="962" alt="スクリーンショット 2020-02-12 18.07.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277131/27503f3f-30c7-513d-29ca-4c1144dbec75.png">
3. 「create」をクリックし、作成したAPPの「Details」をクリック
4. 「Keys and tokens」タブを選択し、Access token & access token secret の「Generate」ボタンをクリック
5. 表示された「API key」、「API secret key」、「Access token」、「Access token secret」の4つをメモしておく
<img width="1439" alt="スクリーンショット 2020-02-12 17.57.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277131/3ed46ae3-ba48-e1ee-717e-b9a870b4c7bf.png">

#Pythonプログラムの作成
pythonの設定

```console
# 仮想環境の作成
$ sudo apt-get install python3-dev python3-venv
$ python3 -m venv env
$ cd env
$ source bin/activate
```
tweepyのインストール

```console
(env) $ python -m pip install tweepy
```

###teitter.pyを作成

```python
#-*- coding:utf-8 -*-
import tweepy
import os
# 各種キーをセット
CONSUMER_KEY = 'xxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxx'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
ACCESS_TOKEN = 'xxxxxxxxxxxxxxxxxxxx'
ACCESS_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
#APIインスタンスを作成
api = tweepy.API(auth)
print('Done!') #準備完了

# つぶやきを取得
for status in tweepy.Cursor(api.user_timeline,screen_name = "取得したユーザーのID",exclude_replies = True).items():
    tw_text = status.text
    tw_text = ''.join(tw_text.splitlines())
    tw_text = tw_text.replace('(',' ').replace(')',' ').replace(' ','')
    print(tw_text)
    os.system('/home/pi/jtalk.sh ' + tw_text)
    break #とりあえず最新のつぶやきのみ
```

#実際に動かす！
以下のコードを打つ

```console
(env) $ python twitter.py 
```
指定したユーザーの最新のツイートを男性の声で喋りました！
（鍵垢でも、自分がフォローしていれば喋ってくれました）

#おわりに
今回のハッカソンで指定したユーザーの最新ツイートをラズパイに喋らせることに成功したので、指定したユーザーがツイートしたらそれをしゃべるように改良を加えていきたいと思います！

読んでいただきありがとうございます！