자동으로 Archivov에서 논문을 취득하고, 일본어로 고쳐 Line에 투고하면, 수동적으로 최신 정보를 수집할 수 있을지도! ?

소개



최첨단의 논문은 알고 싶지만, 시간이 없어서 논문을 읽는 신경이 쓰이지 않는다. . .
arXiv 봐도 영어로 잘 모르니까 일본어가 좋다. . .
Slack이라든지 잘 모르고, Line에 통지해 주었으면 한다. . .

그래서 이것을 충족시키는 시스템을 구성해 보았습니다!

실행 이미지는 이런 느낌입니다.


추가 ★20210421



번역에서 오류가 발생하면 아래 참조!
htps : // 이 m/_유슈/있어 ms/83c51에 29771530646659

시스템 구성



이런 느낌으로 구현합니다. 트리거는 파이썬 코드 실행입니다.
①~③을 파이썬 코드 위에 기술하고, ④, ⑤는 IFTTT의 설정으로 실시합니다.


덧붙여서, IFTTT의 설정을 바꾸면 게시물을 line에서 쉽게 slack이나 twitter로 바꿀 수 있습니다.

그럼, 각각에 대해 설명하겠습니다.

①~③:논문 취득으로부터 POST까지의 실장



arxiv로부터의 취득 코드에 관해서는, 하기 URL을 참고(유용)하고 있습니다. HK님 감사합니다.
참고 : 슬랙에서 논문 수집 봇 만들기

주요 변경점은 2점
①: 취득한 Abst를 Google 번역에 걸고 있다
② : Post처가 IFTTT인 webhook
됩니다.

코드 아래에는 개별 환경에서 작동하기 위한 변경 사항이 설명되어 있습니다.

arxiv2line.py
from datetime import datetime
import re
import requests
import pickle
import os
from googletrans import Translator

import requests

# webhook POST先URL
API_URL = "https://maker.ifttt.com/trigger/<IFTTTに設定するイベント名>/with/key/<IFTTTでの個人用KEY>"

# 検索ワード
QUERY = "(cat:cs.CV)+AND+(abs:depth)"



def parse(data, tag):
    # parse atom file
    # e.g. Input :<tag>XYZ </tag> -> Output: XYZ

    pattern = "<" + tag + ">([\s\S]*?)<\/" + tag + ">"
    if all:
        obj = re.findall(pattern, data)
    return obj


def search_and_send(query, start, ids, api_url):
    translator = Translator()
    while True:
        counter = 0

        url = 'http://export.arxiv.org/api/query?search_query=' + query + '&start=' + str(
            start) + '&max_results=100&sortBy=lastUpdatedDate&sortOrder=descending'
        # Get returned value from arXiv API
        data = requests.get(url).text
        # Parse the returned value
        entries = parse(data, "entry")
        for entry in entries:
            # Parse each entry
            url = parse(entry, "id")[0]
            if not (url in ids):
                # parse
                title = parse(entry, "title")[0]
                abstract = parse(entry, "summary")[0]
                date = parse(entry, "published")[0]

                # abstの改行を取る
                abstract = abstract.replace('\n', '')

                # 日本語化 ★②の部分
                title_jap = translator.translate(title, dest='ja')
                abstract_jap = translator.translate(abstract, dest='ja')

                message = "\n".join(
                     ["<br>Title:  " + title, "<br><br>URL: " + url, "<br><br>Published: " + date, "<br><br>JP_Abstract: " + abstract_jap.text])             

                # webhookへPost ★①の部分
                response = requests.post(api_url, data={"value1": message})


                ids.append(url)
                counter = counter + 1
                if counter == 10:
                    return 0
        if counter == 0 and len(entries) < 100:
            requests.post(api_url, data={"value1": "Currently, there is no available papers"})
            return 0
        elif counter == 0 and len(entries) == 100:
            # When there is no available paper and full query
            start = start + 100


if __name__ == "__main__":
    print("Publish")
    # setup =========================================================
    # Set URL of API
    api_url = API_URL

    # Load log of published data
    if os.path.exists("published.pkl"):
        ids = pickle.load(open("published.pkl", 'rb'))
    else:
        ids = []

    # Query for arXiv API
    query = QUERY


    # start =========================================================
    start = 0

    # Post greeting to your Slack
    dt = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
    requests.post(api_url, data={"value1": dt})

    # Call function
    search_and_send(query, start, ids, api_url)

    # Update log of published data
    pickle.dump(ids, open("published.pkl", "wb"))

개별 환경에서 작동하기 위해 변경이 필요한 부분은 코드 상단의 다음 부분입니다.

koko.py
# webhook POST先URL
API_URL = "https://maker.ifttt.com/trigger/<①IFTTTに設定するイベント名>/with/key/<②IFTTTでの個人用KEY>"

# 検索ワード
QUERY = "(cat:cs.CV)+AND+(abs:depth)"

API_URL은 webhook POST 대상 URL을, QUERY는 arxiv에서 검색 단어입니다.
API_URL의 경우,
 ①:IFTTT로 설정하는 이벤트명
②:IFTTT에서의 개인용 KEY
각자 설정해야합니다.

QUERY에 관해서는, arxiv API로 구그하면 나옵니다. 현재는 CV 분야에서 압스트 안에 depth라고 기술하고 있는 것입니다.

④, ⑤: IFTTT 설정



바로 설정을 해갑니다.
전제로서 IFTTT 등록이 끝난 것으로 하겠습니다.
아직 분은 아래 페이지에서 등록까지 해 봅시다.
htps : //이 ftt. 코 m/ぢs 코ゔぇr

Applet 만들기



내 애플릿을 선택합니다.


New applet을 파우치.


Trigger측의 설정 작성!



This를 포치


웹후크를 검색하고 선택합니다.




아래의 입력 박스에 독자적인 Event Name을 붙여 CreateTrigger를 포치합니다.
여기의 Event Name이, 방금 전의 python 코드중의 <①:IFTTT로 설정하는 이벤트명>이 됩니다.



Action측의 설정 작성!



계속해서, Action측의 설정을 실시해 갑니다.





미리 Line 그룹을 만들어두면 거기에 Post 할 수 있습니다.


IFTTT에서 개인 KEY 취득



오른쪽 상단의 settings->service를 포치

service에서 webhook을 찾아서 꺼냅니다.


오른쪽 상단의 설정을 선택합니다.


여기의 빨간색으로 둘러싸인 부분이 IFTTT에서 개인 KEY입니다.


요약



이런 식으로 구현하면 쉽게 LINE에 논문 정리를 게시할 수 있습니다!

이번에는 google coraboratory를 사용하여 이들을 구현했습니다.
htps : // 코 b. 레세아 rch. 오, ぇ. 코 m / 노보보 ks / ぇ l 코메. 아니 pyn b? hl = 그럼

다음 목표는 AWS에서 정기적으로 실행하는 것일까요?
IFTTT의 좋은 공부가 되었습니다!

좋은 웹페이지 즐겨찾기