LINEからTwitterに投稿する
環境:Windows10
LINEにメッセージを送るとTwitterにその内容が投稿されるというものを作りたい。
(実用性は)ないです。
※イメージ図
1.Lambdaでオウム返しbotを作る
line-bot-sdk-pythonを利用する。
参考記事:Lambdaでline-bot-sdk-pythonを使用してオウム返しBOTを作成する
やることはまんま記事通りなので割愛
補足
LINE DevelopersにてWebhook URLを指定する際に、URLをそのまま貼り付けずに、amazonaws.comの後に:443を付ける必要がある。
オウム返しを確かめる
2.Twitterにメッセージを送る
まずTwitterに投稿するための必要なキーを入手する必要がある。投稿したいアカウントでログインしたまま、下記URLを開く。
Twitter Developers
Appを作ったら、Consumer API keysとAccess token & access token secretを発行する。
今回は LINE to lambda to Twitter というApp名で作成。
次に先程入手したキーを使ってTwitterに接続するために認証ライブラリ(requests_oauthlib)をインストールする。
cd 作業フォルダ
python -m pip install requests_oauthlib -t .
上記の参考記事のコードに手を加える。
import os
import sys
from requests_oauthlib import OAuth1Session
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
from linebot.exceptions import (
LineBotApiError, InvalidSignatureError
)
import logging
UPDATE_URL = 'https://api.twitter.com/1.1/statuses/update.json'
logger = logging.getLogger()
logger.setLevel(logging.ERROR)
twitter_ck = os.getenv('TWITTER_CK', None)
twitter_cs = os.getenv('TWITTER_CS', None)
twitter_at = os.getenv('TWITTER_AT', None)
twitter_as = os.getenv('TWITTER_AS', None)
channel_secret = os.getenv('LINE_CHANNEL_SECRET', None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)
if channel_secret is None:
logger.error('Specify LINE_CHANNEL_SECRET as environment variable.')
sys.exit(1)
if channel_access_token is None:
logger.error('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.')
sys.exit(1)
line_bot_api = LineBotApi(channel_access_token)
handler = WebhookHandler(channel_secret)
def tweet(text):
params = {"status": text }
twitter = OAuth1Session(twitter_ck, twitter_cs, twitter_at, twitter_as)
twitter.post(UPDATE_URL, params = params)
def lambda_handler(event, context):
signature = event["headers"]["X-Line-Signature"]
body = event["body"]
ok_json = {"isBase64Encoded": False,
"statusCode": 200,
"headers": {},
"body": ""}
error_json = {"isBase64Encoded": False,
"statusCode": 403,
"headers": {},
"body": "Error"}
@handler.add(MessageEvent, message=TextMessage)
def message(line_event):
text = line_event.message.text
tweet(text)
#line_bot_api.reply_message(line_event.reply_token, TextSendMessage(text=text))
try:
handler.handle(body, signature)
except LineBotApiError as e:
logger.error("Got exception from LINE Messaging API: %s\n" % e.message)
for m in e.error.details:
logger.error(" %s: %s" % (m.property, m.message))
return error_json
except InvalidSignatureError:
return error_json
return ok_json
TWITTER_CK,TWITTER_CS,TWITTER_AT,TWITTER_ASはそれぞれ取得したTwitterのAPIキーで、lambdaで環境変数として設定しておく。
再度圧縮し、lambdaへアップロード
試しにLINEへメッセージを投稿してみる。
Twitterを確認してみる。
viaも確認してみる。
問題無いようだ。
3.まとめ
今回のコード
Line_to_lambda_to_Twitter - akaness1git GitHub
必要なもの
・line-bot-sdk-python
・requests_oauthlib
・LINEの各種APIキー
・Twitterの各種APIキー
この記事が気に入ったらサポートをしてみませんか?