かまってちゃんな彼女をPythonで作った話

## 前置き
この記事は[クソアプリアドベントカレンダー](https://qiita.com/advent-calendar/2020/kuso-app)11日目の記事です。
昨日の@dala00さんの[素晴らしい記事](https://qiita.com/dala00/items/68e4c0c30f67813b58dc)も是非ご覧ください。


------
## みなさん、もうすぐクリスマス

### 彼女からLINEきていますか？？？
きていない寂しいみなさんも、きているけれども最近素っ気ない返信しかくれない皆様にも「Rimaちゃん」はいつでもかまって欲しいアピールをします。LINEの通知を切っている人にもオフラインであろうと全力でメッセージを届けます。愛の力ってすごい！
![スクリーンショット 2020-12-10 23.03.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163357/4646c035-3b75-7acb-c920-fc64748844ee.png)


### 1.かまってちゃんな彼女はOSの機能で通知を鳴らす。
AppleScript/osascript というものをご存知だろうか。
これはコマンドラインからも使うことができ、例えば

```コマンドライン
$  osascript -e 'display notification "テストです" with title "osascript使ってみた"'
``` 
![スクリーンショット 2020-12-10 22.54.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163357/eed2553f-0bbd-1c9f-d977-b1702bbc0ab5.png)

このようにタイトル付きで通知を行うことができる。

これを特定の間隔で通知するようにPythonのコードに落とし込むとこうなる。

```python
import os
import schedule

def tell(msg):
  os.system("osascript -e 'display notification ¥" {} ¥" with title ¥" osascript使ってみた ¥" '".format(msg))

def call_wait():
    schedule.every(1).seconds.do(tell,"メッセージの中身を書く")
    while True:
        try:
            schedule.run_pending()
            time.sleep(1)
        except KeyboardInterrupt:
            print("中断しました。")
            break


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    call_wait()
```

ここでは、formatを使って文字列の部分に引数である伝えたいメッセージを挿入できるような形にした。
今回は、1秒毎に「メッセージの中身を書く」というメッセージが通知されるようなコードになっているがこれを改造して女の子が話しているように『調教』しよう。

### 2.可愛い彼女にはメープルのような甘い言葉を。
やはり、これは人によって異なると思いますが誰にでも必要なのは

- 自分が必要とされているなという愛情表現
- 知的な会話

だと思います。前者は、以下のような愛のこもった文字列を使うことで解決すると思います。

```python
const msgList = [
    "ねーねー。",
    "きいてるー？？",
    "はなそーよー",
    "大好きだよ",
    "愛してるよー！",
    "すき……",
    "ちゅっちゅ！！",
    "他の女と一緒にいないよね…？",
    "あなたを誰にも渡さない……",
    "ねー……",
    "むぅ",
    "いっぱいお話したいだけなのに……",
    "ねぇってばー",
    "すきだよ？",
    "こんなに好きなのに……",
    "私が悪いのかな……?",
    "はぁ。。。",
    "ふーん…",
    "こんなにすきなのに……",
    "あいたい。",
    "ねぇ、会いたいよー……",
    "通話しよ。。。",
]
```

後者は、やっぱり新聞の記事とかを読んでいるといいよね！というわけで任意の新聞の記事をスクレイピングして紹介することで解決したいと思います。

スクレイピングには、定番のBS4ことBeautiful Soupを使ってさくっと実装していきましょう。

ここら辺は先行事例をみて書いていくといいと思います。
https://pypi.org/project/beautifulsoup4/

ということで上記のメッセージリスト＋ニュースのセットの中からランダムで選ぶようなコードを書いていきましょう。


### 猫のような彼女は気まぐれに通知を鳴らす。

毎秒とか同じ時間に連絡のくる彼女って怖くないですか…？？僕は毎秒彼女から「愛してる」とかきたら引いちゃいます。

そんな男の子のためのパラメーター大体平均5秒に１回しかこないけどこないときはこないように実装していきます。

```python
import random
def(ofen):
   job_id=random.randint(0,len(msgList)+ofen)
   if job_id<len(msgList):
        tell(msgList[job_id])
   elif job_id<len(msgList)+4:
        tell("ねえねえ、こんなニュースがあったよ！「"+get_news()+"」")
   return 0
```

これで引数のofenに１００とか１０００とか適当な値を入力するとそこそこの頻度で（とは言え、ofen=１００だいたい５−６秒に１度くらいの頻度になる)かまって欲しいメッセージをデスクトップに送ることができる。彼女感出てきましたね。もう、君は目の前の彼女に夢中です。
![スクリーンショット 2020-12-10 23.21.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163357/5cc8366f-6060-aa7d-1fcf-651c05825918.png)
こんな風にいってくれる彼女が欲しい（ほんまか・・・？？？）

実際のコードはこちらです↓
https://github.com/yuriacats/LarimaDesktop/blob/master/main.py

だいたい１００行前後のコードで可愛い彼女は完成しました。めんどくさいことも可愛い彼女も作れるPythonみんなも使っていこう！

---
追記(2020/12/21)
@MikakuninTomori さんがこの記事のアイデアを受けてLINEで「かまってちゃんな彼女」を作ってくれました!
https://qiita.com/MikakuninTomori/items/e9af8162770588ce86d5

(LINEBOT化は当初からアイデアがあっただけに「先越された!!」って思いました

---

明日は　@onushi-k さんの投稿です。楽しみですね！！