匿名グループラインBOT

LINEのBotを公開しました。

いままで身内向けのBOTを作ることはあったけど、初めてオープンなのを作りました。

LINEのBOTを作るにはHTTPリクエストを受けるサーバーが必要なんですが、サーバーを立てるのはお金がかかります。そこで今回は無料でそれっぽいことができるGoogleAppsScriptを用いてやってみました。

 

実装したこと

・基本機能(発言を他の利用者に拡散)

・アイコンの実装

・ミュート機能

f:id:pishiko:20180602190037p:plain

まずLINE APIで多数にメッセージを配信するには宛先のuserIdを指定する必要があります。しかし、Botと友達になっているユーザーのリストはAPIでは手に入らないため、自分で用意する必要があります。なので、友達登録されたときのイベントを使って記録していきます。

次に記録ですが、DBをGASでお手軽に実装するにはGoogleSpreadSheetを用います。視覚的にも分かりやすいし簡単だし、ちょっと遅いけど使えます。

 

アイコンはキューをGSSで実装して、友達登録時にユーザーリストにIDと一緒にします。友達をやめたときはアイコンキューに戻してやって、ユーザーリストからIDごと消してやります。

 

ミュート機能はユーザーがミュートかどうかリストに保存して、LINE APIのリッチメニューから操作できるようにします。リッチメニューはLINE @MANAGERからぽちぽちで作れます。リッチメニューのボタンが押されたらキーワードを発言するように設定して、それをGASでキャッチします。

 

最後に発言をほかの登録者に拡散するようにします。LINE APIのイベントでメッセージ受信をキャッチして、userIdからユーザーリストを検索してアイコンを取得、そのあとユーザーリストの発信者以外かつミュートになっていない人に成形したメッセージを配信します。

 

ざっとメモしました。

chainerとCUDAとそれからcuDNNおまけにcuPyインWindows

手元にあるゲーミングPCのGPU、ゲームするだけじゃもったいない!ニューラルネットワークの学習に使おう!

簡単にできるかなーと思ってたけど、公式がwindowsに対応してなくてもう大変!GeForce GTX 1060、一体どうなっちゃうの!?

 

chainerとは別にpip install cupyがどうにもうまくいかず

いろいろ試行錯誤した結果こんな感じでできました

 

・CUDAv8.0 ←↙成功例を見つけた構成に下げた

・cuDNNv6.0

・VS2015 with Update 3 ←VS2017じゃだめだよ

Pythonをアンインストールしてanacondaに移行

環境変数

INCLUDE

C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include

PATH

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

 

最後はanacondaのインストールでうまくいきました。何してもpipでエラー吐く!!!って人はanacondaでやってみてください

 

ちなみにchainerのmnistサンプルを実行してみたら約7倍の早さでした。めっちゃ早い。すごい。

めでたしめでたし。

 

 

 

YATTAこと#4月

やったこと

  • discordのbotに読み上げ機能を追加した
  • 学科掲示板お知らせLINEbotをnotifyからちゃんとしたbotに変えた
  • 大学のお知らせ掲示板をスクレイピング
  • 作業しながらyoutube見るためのツールをVisual C#で作った
  • discordBotみんなで開発するためにgitの使い方を少し学んだ
  • AtCoderに参加

Linux上のbotでも読み上げるにはOpenJTalkを利用しました。スクレイピングはやったことあったけど動的なHPだったからseleniumとヘッダなしChromeでやりました。

これからしたいね

Pythonで色々なサイトの動画情報を取得する

経緯

discordBOTが作れるdiscord.pyでyoutube-dlをプレイヤーとして使うことができるが、動画再生しかできないのでurlからタイトルやサムネを尋ねる方法を調べた。youtube-dlを用いる理由は対応している動画サイトの数が圧倒的に多いから。discordBOTについては今度書きます。チャットBOTについては解説が多いけどボイスチャンネルはあんまりないので。

本題

こんな感じ。

import youtube_dl

def get_info(url):

    params = {
        'simulate':True
        }
        
    ydl = youtube_dl.YoutubeDL(params)

    try:
        info = ydl.extract_info(url,download=False)
    except:
        print("失敗しました")
    else:
        print("「{}」の動画情報を取得しました\n".format(info['title']))
        return info

def main():
    url = "https://www.youtube.com/watch?v=03H1qSot9_s"
    info = get_info(url)
    
    if not info is None:
        print("'title' : "+info['title'])
        print("'webpage_url' : "+info['webpage_url'])
        print("'description' :\n"+info['description'])
        print("'upload_date' : "+info['upload_date'])


if __name__ == '__main__':
    main()

出力

[youtube] 03H1qSot9_s: Downloading video info webpage
[youtube] 03H1qSot9_s: Extracting video information
「10分で分かる月ノ美兎【にじさんじ公式】」の動画情報を取得しました

'title' : 10分で分かる月ノ美兎【にじさんじ公式】
'webpage_url' : https://www.youtube.com/watch?v=03H1qSot9_s
'description' :
にじさんじ公式バーチャルライバーの、月ノ美兎です!
こちらは、今までの生配信のいいところを無理やりギュギュッとまとめた動画になります。

苦渋の決断で削った部分が多々ありますので、興味を持ってくださった方は是非配信アーカイブをご視聴くださいね。
'upload_date' : 20180215

paramを色々変えるとダウンローダーの設定ができます。今回のは動画のダウンロードはしないよってやつ。
paramはここ全部載ってます。
github.com

infoは辞書型で返ってくるので、titleやらwebpage_urlやらで抜き出してあげるといいです。エンコード方法とかも分かるみたい。

youtubeだけじゃなくてniconicoとかtwitch、いかがわしい動画サイトもいけるみたいです。
ただ一部の動画(特に例のアレ動画は多い)は401でアクセスできないみたい、原因は不明。
動画の前に出てくる警告?がある動画はダメなのかなーと予想してます。ちなみに401エラーは、tryをスルーするので、

if info['formats'][0]['format_id']=='normal':
    print("失敗")

で判断するのがよさそう。大体の動画はこれで判別できます。

asyncioと向き合う時が来た

今まで何となくそれとなく使ってきたasync, await。discord.pyのリファレンスがあんまり親切じゃなかったのでついに正面から向き合うことに。その時いいブログを見つけたので貼っておきます。

iuk.hateblo.jp

うーんとてもわかりやすい。

大学一年がもうすぐ終わるので日記ブログを書くことにした

 

今までやってきたこと

プログラミングが好きだと思い込んで、やりたいことが思いついたらググって作るってのをここ一年繰り返してました。

  • C++とDXライブラリでテトリスとか荷物押すゲームとか既存のゲームを再現したりして、ゲーム作る方法は分かったけどオリジナルを作ろうとして作りたいものが見えなくなって飽きた
  • PythonでDiscordのbotとかLINEのbotとか作ったりTwitterAPI触ったりした
  • 深層学習の本読んで画像認識少しだけやった、一応最後までやったけどそれで終わり
  • メルカリのアップロードをスプレッドシートから読み込んで手動より少し楽にする程度のツールを作った
  • UnityとC#もほんの少しだけ弄った。何も完成させられていない

今初心者レベルまで使える言語はPython、C、C++C#とかjavaもほんの少しだけやった。

Qiitaとかはてブとか見てるとすごい人がたくさんいて、自分の能力もどれくらいあるのかわからなくてめっちゃ焦ってます。今まではゲームしながらやりたいこと思いついたらやるって感じでゆるーくやってたけどそれじゃまずいんじゃないかと思い始めました。で、とりあえず自分のやったことを発信することにしました。ここで発信すれば多少飽きるまでの時間が長くなるかな?わかりません。

これからすること

どれをしようかなって感じ。

  • Ruby on Railsを勉強してwebアプリを公開する
  • EffectivePython読んでPythonスキルを深める
  • 深層学習の本もっと読んで理解を深める
  • UnityのARで遊ぶ
  • Androidアプリ作って儲ける
  • youtubeチャンネル作って登録者100人で焼き肉食べ放題行く(方法は不明)

統一感がないこのラインナップ。結局何がしたいんだろうか。何をすべきなのかも分からない。