Ruby2.5.0 × AWS Lambda에서 Feedly의 읽지 않은 기사를 Slack에 알립니다.
Feedly를 사용하지 않는 사람이라도 Lambda를 Ruby로 사용하거나 응용이 효과적인 기사로 한 생각이므로 좋으면 읽어 가 주세요!
경위
Feedly 열려 등록된 웹사이트에 최신 기사가 있는지 확인하고, 없으면 닫아서...
그리고 단기간에 여러 번 확인하는 것은 귀찮습니다! ! 하지만 새로운 도착이 신경이 쓰인다! !
라고 생각한 게으른 나는, 신착 기사가 있으면 Slack에서 가르쳐 주는 것이 있다고 생각했기 때문에, 타이틀에 있는 대로 Slack에 미독 기사를 통지하는 스크립트를 만들었습니다.
Lambda의 언어 선택입니다만, 평상시부터 사용하고 있어 작년 12월부터 서포트된 Ruby를 사용합니다.
필요한 것
참고 기사
참고 기사
이상입니다. 갖추어지지 않은 분은 참고 기사로부터 부탁합니다!
구현
Feedly API 조사
우선 Feedly API 공식 사이트를 보면
많이 있습니다
API의 카테고리(화상 오른쪽)를 보면 Streams에 있을 것 같네요!
안을 봐 가면 그들 흔들림 기재가!
우선 써 있는 거리
unread=true
옵션을 붙여 주면 취득할 수 있는 것이 아닌가! 생각
`curl -H 'Authorization:[取得したuser_id]' https://cloud.feedly.com/v3/streams/contents?streamId=[取得したuser_id]/unreadOnly=true
실행 한 곳
{"errorCode":400,"errorId":"ap8int-sv2.2019020122.1070524","errorMessage":"invalid stream id"}
400이 돌아왔다
stream_id에 user_id는 사용할 수 없는 것일까라고 생각하고 구구한 곳 돈피샤 기사을 발견!
이 기사대로
curl -H 'Authorization:[取得したuser_id]' https://cloud.feedly.com/v3/streams/contents?streamId=user/[取得したuser_id]/category/global.all&unreadOnly
한 곳, 취득할 수 있었습니다!
응답을 가공할 필요가 있으므로 그 로직을 Ruby로 짜서 Lambda에서 정기 실행합니다!
Gemfile에 작성
이번에는 http_client와 slack의 Gem을 사용하기 때문에 Gemfile에
Gemfile
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem 'httpclient'
gem 'slack-notifier'
라고 기술하고,
bundle install --path vendor/bundle
을 실행하고 vendor 아래에 경로를 지정하십시오 (lamdba에 업로드 할 때 사용)
실행 파일 작성
그리고 실행 파일에
fetch_unread_article.rb
require 'httpclient'
require 'json'
require 'slack-notifier'
# APIから未読記事を取得する
def get_unread_articles
client = HTTPClient.new
query = { unreadOnly: true }
response = client.get("https://cloud.feedly.com/v3/streams/contents?streamId=user/#{ENV['STREAM_ID']}/category/global.all", query: query, header: [["Authorization", "#{ENV['ACCESS_TOKEN']}"]])
response.status == 200 ? create_message(set_articles(response)) : post_slack('APIのエラーで記事を正常に取得できませんでした!')
end
# responseから未読記事のタイトルとURLを取得
def set_articles(response)
article_title_and_url = []
body = JSON.parse response.body
body['items'].each do |item|
article = []
article.push(item['title'])
article.push(item['originId'])
article_title_and_url.push(article)
end
article_title_and_url
end
def create_message(title_and_urls)
message = ''
title_and_urls.each do |c|
message << "\rタイトルは#{c[0]}\rURLは#{c[1]}です。\r"
end
post_slack(message)
end
def post_slack(message)
notifier = Slack::Notifier.new("#{ENV['WEB_HOOK_URL']}")
message.empty? ? notifier.ping('未読の記事はありません!') : notifier.ping(message)
end
def lambda_handler(event:, context:)
get_unread_articles
end
라고 기술해, lambda에 올리기 위해 vendor의 부하와 실행 대상 파일을 zip화합니다.
zip -r fetch_unread_article.zip fetch_unread_article.rb vendor/
lambda에 업로드
그리고 lambda에 업로드합니다!
Handler의 부분에서
fetch_unread_article.lambda_handler
가 되어 있는지 주의해 주세요.여기는
実行ファイル名.実行関数名
이므로, 스스로 파일명이나 실행 함수를 임의의 값으로 할 수도 있습니다!lambda로 설정하면 Save하십시오.
그런 다음 테스트를 눌러보십시오.
이렇게 알림이 오면 성공입니다!
그런 다음 정기 실행을 위해 CloudWatch Event를 사용합니다.
Cloudwatch Event에 대한 설명은 이쪽 기사을 이해하기 쉽기 때문에 참조하십시오.
이상입니다!
Reference
이 문제에 관하여(Ruby2.5.0 × AWS Lambda에서 Feedly의 읽지 않은 기사를 Slack에 알립니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k__s/items/092a8c41fbf755b34d1c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)