見出し画像

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キー

この記事が気に入ったらサポートをしてみませんか?