람바다를 이용해서 트위터 정기 투고봇 만들어주세요.
9356 단어 AWS
1. 기본 구성
2.S3에 저장된 데이터 형식
트위터의 시간과 내용을 csv 형식으로 기재합니다.
즉석이라 텍스트 파일을 사용했지만 여기서도 NosQL을 사용할 수 있는데...
Example)
[트위터 타임], [트위터 내용]
3. IAM Role의 설정
다음과 같이 S3 액세스를 허용하는 IAM 정책을 수립하고 IAM Role에 첨부합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
4. 람바다 펀션의 제작
Lambda Function 생성, 트리거(시간당 텍스트 파일 검색)
Cloud Watch를 사용합니다.
Lambda 함수를 만드는 프로그램은 다음과 같습니다.
구조적으로'텍스트 파일에 기재된 시간'과'현재 시간'이 일치하면
트위터 REST API에 트위터 정보를 공동으로 게시합니다.
import json
import boto3
import re
import datetime
from requests_oauthlib import OAuth1Session
S3 = boto3.client('s3')
def lambda_handler(event, context):
# TODO implement
#バケットファイルからテキスト一覧を取得
BUCKET = S3.list_objects_v2(Bucket="daily-tweets",Prefix="DAILY_TWEETS")
for content in BUCKET['Contents']:
#~~.txtファイルを検索
if re.match(r'^[^\.]+\.txt',content['Key']):
obj=S3.get_object(Bucket="daily-tweets",Key=content['Key'])
l=obj['Body'].read().decode('utf-8').split(",")
time=datetime.datetime.utcnow() + datetime.timedelta(hours=9)
print (time.strftime("%H") )
#時間データと照合して合致したらツイート
if time.strftime("%H") == l[0]:
print (l[1])
CK = '****' # * enter your Consumer Key *
CS = '****' # * enter your Consumer Secret *
AT = '****' # * enter your Access Token *
AS = '****' # * enter your Accesss Token Secert *
UPDATE_URL = 'https://api.twitter.com/1.1/statuses/update.json'
twitter = OAuth1Session(CK, CS, AT, AS)
req = twitter.post(UPDATE_URL,params={"status":l[1]})
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
단지 이렇게 한 번만 시작하는 프로그램이기 때문에 정기적으로 실행하기 위해 클라우드 워치 이벤트에cron을 설정합니다.
설정값은 다음과 같습니다. 1시간마다 한 번씩 밀어줍니다.(cron으로 바꾸면 10분마다 가능하고 이번 주 수요일에만 가능합니다.)
cron(0 * * * ? *)
주)
from requests_oauthlib import OAuth1 Session→이쪽은 AWS 표준을 사용할 수 없기 때문에 layer를 만들어야 합니다.상세한 상황은
아래의 문장은 참고할 수 있다.
https://www.yamamanx.com/aws-lambdapython-twitter-post/
5. 볼품없는 곳
다음과 같이 S3 액세스를 허용하는 IAM 정책을 수립하고 IAM Role에 첨부합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
4. 람바다 펀션의 제작
Lambda Function 생성, 트리거(시간당 텍스트 파일 검색)
Cloud Watch를 사용합니다.
Lambda 함수를 만드는 프로그램은 다음과 같습니다.
구조적으로'텍스트 파일에 기재된 시간'과'현재 시간'이 일치하면
트위터 REST API에 트위터 정보를 공동으로 게시합니다.
import json
import boto3
import re
import datetime
from requests_oauthlib import OAuth1Session
S3 = boto3.client('s3')
def lambda_handler(event, context):
# TODO implement
#バケットファイルからテキスト一覧を取得
BUCKET = S3.list_objects_v2(Bucket="daily-tweets",Prefix="DAILY_TWEETS")
for content in BUCKET['Contents']:
#~~.txtファイルを検索
if re.match(r'^[^\.]+\.txt',content['Key']):
obj=S3.get_object(Bucket="daily-tweets",Key=content['Key'])
l=obj['Body'].read().decode('utf-8').split(",")
time=datetime.datetime.utcnow() + datetime.timedelta(hours=9)
print (time.strftime("%H") )
#時間データと照合して合致したらツイート
if time.strftime("%H") == l[0]:
print (l[1])
CK = '****' # * enter your Consumer Key *
CS = '****' # * enter your Consumer Secret *
AT = '****' # * enter your Access Token *
AS = '****' # * enter your Accesss Token Secert *
UPDATE_URL = 'https://api.twitter.com/1.1/statuses/update.json'
twitter = OAuth1Session(CK, CS, AT, AS)
req = twitter.post(UPDATE_URL,params={"status":l[1]})
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
단지 이렇게 한 번만 시작하는 프로그램이기 때문에 정기적으로 실행하기 위해 클라우드 워치 이벤트에cron을 설정합니다.
설정값은 다음과 같습니다. 1시간마다 한 번씩 밀어줍니다.(cron으로 바꾸면 10분마다 가능하고 이번 주 수요일에만 가능합니다.)
cron(0 * * * ? *)
주)
from requests_oauthlib import OAuth1 Session→이쪽은 AWS 표준을 사용할 수 없기 때문에 layer를 만들어야 합니다.상세한 상황은
아래의 문장은 참고할 수 있다.
https://www.yamamanx.com/aws-lambdapython-twitter-post/
5. 볼품없는 곳
import json
import boto3
import re
import datetime
from requests_oauthlib import OAuth1Session
S3 = boto3.client('s3')
def lambda_handler(event, context):
# TODO implement
#バケットファイルからテキスト一覧を取得
BUCKET = S3.list_objects_v2(Bucket="daily-tweets",Prefix="DAILY_TWEETS")
for content in BUCKET['Contents']:
#~~.txtファイルを検索
if re.match(r'^[^\.]+\.txt',content['Key']):
obj=S3.get_object(Bucket="daily-tweets",Key=content['Key'])
l=obj['Body'].read().decode('utf-8').split(",")
time=datetime.datetime.utcnow() + datetime.timedelta(hours=9)
print (time.strftime("%H") )
#時間データと照合して合致したらツイート
if time.strftime("%H") == l[0]:
print (l[1])
CK = '****' # * enter your Consumer Key *
CS = '****' # * enter your Consumer Secret *
AT = '****' # * enter your Access Token *
AS = '****' # * enter your Accesss Token Secert *
UPDATE_URL = 'https://api.twitter.com/1.1/statuses/update.json'
twitter = OAuth1Session(CK, CS, AT, AS)
req = twitter.post(UPDATE_URL,params={"status":l[1]})
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
→ 시크릿 관리자 같은 건 어떻게든 해결할 수 있을지도 몰라...
6. 끝말
제작된 트위터를 잽싸게 해설했다.그래서 "여기 구성이 더 좋아요!"기다리다
있으면 많이 나무라세요.
Reference
이 문제에 관하여(람바다를 이용해서 트위터 정기 투고봇 만들어주세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Gaarumage_dn/items/313c164d17549d990c46
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(람바다를 이용해서 트위터 정기 투고봇 만들어주세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Gaarumage_dn/items/313c164d17549d990c46텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)