超ベンリなAPI(非公認)があるんです。
って記事を書こうとしたら、消された。。。2015/8/17
githubにあったページ→https://github.com/carpedm20/LINE
幸いマニュアルのページとPIPのパッケージは、残っているので利用可能です。
マニュアルのページ→carpedm20/LINE(英語)
LINE 非公式APIを使ったBOTの概要
- API自体はpythonで書かれているためPC必須 windowsでやります。
- 作業時間大体1時間くらい
- 本家のLINEからクレームがあったようで、1度旧バージョンにもどしてからログインのためのトークンを取得する必要あり
windows環境
python版 windowsをインストール
python.org
2.7.10をダウンロード後.msiをクリックしてインストール。
*インストール先が通常のアプリと異なり、ドライブ直下になります。
Cドライブの場合→c:\python27
インストールが終わったら、環境パスに以下の2つを加えます。
- C:\Python27
- C:\Python27\Scripts;
コマンドプロンプトを開き、PIPをインストールします。
easy_install pip
carpedm20/LINEのインストールとバージョンコントロールbat
ここからLINEのプラグインを整えていきます。
ドライブはcドライブとして記述しますのでpythonのインストール場所を変更した場合などは読み替えてください。
c:\python27を開き新規フォルダを作成 LINEとします。
LINEフォルダの中に新規テキストを作成します。
テキストを開来ます。
以下を貼り付け。↓↓↓↓
cd /D %~dp0
:sento
for /f %%i in (C:\Python27\LINE\temp.txt) do Set aaa=%%i
echo %aaa%
pip uninstall -y LINE
pip install LINE
python bot.py %aaa%
pause
if %ERRORLEVEL%==1000 (
pip uninstall -y LINE
pip install LINE==0.1.0
python tokenget.py
goto sento
)
pause
ここまで↑↑↑*この行は貼り付けない。
テキストを保存して、一度閉じてください。
ファイルの拡張子を『.txt』から『.bat』へ書き換えてください。
例 bot.bat
LINEのtoken取得用スクリプトとbotスクリプト作成
続けて、トークン生成用のスクリプトを作成します。
先ほど同様LINEフォルダの中に新規テキストを作成します。
ファイル名 tokenget.pyとしてください。(拡張子に注意)
以下を貼り付け↓↓↓
# coding: utf-8
import sys, re
from line import LineClient
client = LineClient("ラインに設定したメールアドレス","パスワード")
f = open(temp.txt, w)
f.write(client.authToken)
f.close()
ここまで↑↑↑*この行は貼り付けない。
ラインに設定したメールアドレス、パスワードを書き換えてください。
facebookで認証した場合でも後から入力できるのでスマホ側で入力してください。
.pyのファイルについてはpythonのインデントが重要になりますので、ずれていたら修正してください。
(windowsのpythonならインストール時にIDLEもインストールされているのでそちらで編集すると少し楽ができます。)
最後に自動で返信したりするボット用のファイルを作成します。
LINEフォルダの中に新規テキストを作成します。
ファイル名 bot.pyとしてください。(ストレートすぎるネーミング)
以下を貼り付け↓↓↓
# coding: utf-8
from line import LineClient, LineGroup, LineContact
import sys, re
import random
import time
params = sys.argv
token=params[1]
try:
client = LineClient(authToken=token)
print "Login ok"
except:
print "Login Failed"
sys.exit(1000)
while True:
op_list = []
for op in client.longPoll():
op_list.append(op)
for op in op_list:
sender = op[0]
receiver = op[1]
message = op[2]
print sender.name
time.sleep(10)
textlist= ["トーク1", "トーク2","トーク3"]
textt=random.choice(textlist)
#sender.sendImage(img/sample.jpg)
sender.sendMessage(textt)
ここまで↑↑↑*この行は貼り付けない。
トーク1・・・の部分を書き換えると自動応答するメッセージが変更されます。
LINEフォルダに「img」フォルダを作成しsample.jpgを入れて、sender.sendImage(img/sample.jpg)の先頭の#を消すと画像も送れます。
ほとんどbot部分はほとんどマニュアルのままです。
なお、sender.idとすると相手の固有のIDを取得することができます。
time.sleep(10)で処理を一時止めています。相手の送信があった場合に即時返信してしまうため待ち時間を撮っています。(その間他の処理も停止するので良くない気がする。)
sys.exit(1000)ログインできなかった場合のエラーメッセージ
batファイル側で判断して、APIのバージョンを上げたり下げたりするのに使う。
ソースは以上です。
実行してみる
LINEフォルダ内に作ったbot.batを実行します。
最初に最新版のAPIをインストールし、bot.pyを行いますがトークンがないのでエラー1000で止まります
cmdにpauseで停止した状態が表示されるのでエンターキーを押してください。
自動でAPIのバージョンを0.1.0まで下げてトークンの生成を行います。
この時認証として4桁の数字がCMD上に表示されるのでスマホ側のLINEに入力してください。
LINEの確認キーをタッチすると自動で処理が再開されます。
後は旧APIがトークンを取得し、一旦temp.txtに書き込んだ上で
再度batの先頭にもどり最新版のAPIをインストールしてログインします。
LINE bot作成まとめ
トークン取得のため、0.1.0と0.7.1を交互にインストールするという力技でした。
参考にしたサイトなどによるとアンインストールせずにうまく行う方法もあるようだが、
トラブルの原因になるようなので避けたことと、gitから削除されてしまったものの今後のアップデートに期待して?(あるのかバージョンアップ?)
その際の手順を出来るだけ減らしたいと考えパワープレイに出た。
この手のAPIはもちろんLINEの規約でも禁止されていて、LINE本家自体も対策をかなりしているようだ。
特に、今回気になった点として注意してほしい点が2つ
- LINE側でのトークンの更新が頻繁に行われる
- トークンが失効していないのにbat処理の先頭を旧バージョンにしてトークン取得を行うと一定期間トークン吐かなくなる
pythonの文句はtwitterで。
あくまで技術参考までに!