Platypush를 사용하여 RSS 소스에서 맞춤형 뉴스레터 제공

나는 줄곧 정성껏 기획한 시사통신의 팬이다.그것들은 나로 하여금 하루, 일주일, 한 달 동안 내가 주목하는 분야에서 발생하는 일에 대해 좋은 개술을 할 수 있는 기회를 주었다.그러나 모든 시사통신이 이런 종류에 속하는 것은 아니다.어떤 사람들은 제3자에게 이메일 주소를 판매하기 전에 심사숙고하지 않는다. 눈 깜짝할 사이에 당신의 메일박스는 당신이 요구하지 않은 메일에 잠기기 쉽다.다른 사람들도 다른 서비스나 시사 통신에 귀하의 주소를 등록할 수 있으며, 귀하가 받고 싶은 통신을 상세하게 설정하지 않을 수도 있습니다.가장 좋은 상황에서도 프라이버시를 가장 잘 아는 사용자는 시사통신에 등록하기 전에 심사숙고할 수 있다 - 너는 너의 개인 이메일 주소를 믿을 수 없는 사람에게 주었다. 이것은 "그래, 이것은 나의 주소야. 나는 이 화제에 흥미가 있어."라는 것을 의미한다.또한 대부분의 시사 통신은 URL에 추적 파라미터를 추가하기 때문에 사용자의 참여도를 쉽게 측정할 수 있다. 이것은 반드시 당신을 만족시키는 것은 아닐 수도 있다.그 밖에 맞춤형 마니아도 그의 시사 통신에서 내용을 더욱 세밀하게 선택할 수 있는 용례가 있을 수 있다 - 매일/매주 같은 전자메일에 일부 정보원을 집중하고 싶거나, 시사통신에 포함된 특정한 주제 서브집합에만 흥미를 느끼거나, 관련이 없는 내용을 필터하거나, 발표 요약의 스타일을 맞춤형으로 설정할 수도 있다.마지막으로 5줄 코드와 몇 개의 매개 변수의 조정을 통해 뉴스 원고를 교부하는 전자동 방식은 많은 규모의 회사들에게 천국이다.

시사 통신을 올리다
과거에 내 글을 읽은 사람들은 내가 RSS 구독에 열광하는 소비자라는 것을 알 수 있다.비록 이 기술은 21년의 역사를 가지고 있지만, 중요한 정보를 제공할 때, 그들은 매우 잘하고, 어떠한 소음과 추적기도 없으며, 매우 높은 수준의 통합, 즉 간단한 XML 문서를 제공한다.그러나, 내가 최선을 다해 나의 모든 자료 출처를 갱신하였음에도 불구하고, 많은 잠재적인 재미있는 내용이 불가피하게 누락되었다 - 이것이 바로 시사통신이 개입하는 곳이다. 왜냐하면 그들은 주어진 시간 범위 내에서 생성된 모든 내용을 필터하고 그룹을 나누어 정기적으로 당신의 우편함으로 보내기 때문이다.
나의 이상적인 해결 방안은 이 두 세계의 가장 좋은 측면을 결합시키는 것이다. RSS 구독의 유연성, 그리고 내용과 원본을 필터하고 집합하는 유연성, 그리고 내가 좋아하는 모든 형식 (HTML, PDF, MOBI...) 으로 우리 집 입구에서 완전한 가방을 납품하는 것이다.이 문서에서 몇 가지 도구를 사용하여 이 목표를 실현하는 방법을 보여 드리겠습니다.
  • RSS Feed를 추적하고 지원하려는 하나 이상의 소스(이 경우 MIT 기술 리뷰 RSS feed을 사용하지만 모든 RSS Feed에 적용됩니다.)
  • 이메일 주소.
  • Platypush은 RSS 소스를 사용자 정의 간격으로 모니터링하여 새로운 컨텐츠가 있을 때 이벤트를 트리거하고 새 컨텐츠에서 요약을 작성하여 전체 패키지를 e-메일 주소 목록으로 보냅니다.
  • 우리들은 한 걸음 한 걸음 이 문제들을 토론합시다.

    Platypush 설치 및 구성
    이미 내 글을 읽은 사람들은 아마도 Platypush - 내가 지난 몇 년 동안 구축해 온 자동화 플랫폼을 들은 적이 있을 것이다.익숙하지 않은 분들은 제 first Medium post을 읽어 주십시오. 이것은 그의 기능과 배후의 범례를 보여 줍니다.
    하나 이상의 http.poll 객체가 구성된 RssUpdates 백엔드를 사용하여 RSS 소스를 정기적으로 폴링하고 요약을 작성하거나 mail.smtp 플러그인 또는 google.mail 플러그인을 사용하여 요약을 이메일로 보냅니다.
    논리를 실행하고 싶은 모든 장치에 Platypush, 나무베리, 낡은 노트북, 클라우드 노드 등을 설치할 수 있다.rss 모듈이 포함된 기본 패키지를 설치합니다.또는 요약을 PDF로 내보내려는 경우 pdf 모듈이나 SMTP 서버가 아닌 GMail 주소로 뉴스레터를 보내려는 경우 google 모듈과 함께 설치할 수도 있습니다.
    첫 번째 옵션은 pip을 통해 최신 안정적인 버전을 설치하는 것입니다.
    pip install 'platypush[rss]'
    # Or
    pip install 'platypush[rss,pdf,google]'
    
    또 다른 옵션은 최신 git 버전을 설치하는 것입니다.
    git clone [email protected]/BlackLight/platypush.git
    cd platypush
    pip install '.[rss]'
    # Or
    pip install '.[rss,pdf,google]'
    

    RSS 소스 모니터링
    소프트웨어를 설치한 후 구성 파일 ~/.config/platypush/config.yaml이 없으면 파일을 만들고 RSS 모니터 구성을 추가합니다.
    # Generic HTTP endpoint monitor
    backend.http.poll:
        requests:
            # Add a new RSS feed to the pool
            - type: platypush.backend.http.request.rss.RssUpdates
              url: https://www.technologyreview.com/feed/  # URL to the RSS feed
              title: MIT Technology Review                 # Title of the feed (shown in the head of the digest)
              poll_seconds: 86400                          # How often we should monitor this source (24*60*60 secs = once a day)
              digest_format: html                          # Format of the digest (HTML or PDF)
    
    또한 http.poll requests 객체에 더 많은 소스를 추가할 수 있으며 각 소스마다 고유한 구성이 있습니다.또한 다음과 같은 구성 속성에 유효한 CSS를 전달하여 요약 스타일을 사용자 정의할 수도 있습니다.
    # Style of the body element
    body_style: 'font-size: 20px; font-family: "Merriweather", Georgia, "Times New Roman", Times, serif'
    
    # Style of the main title
    title_style: 'margin-top: 30px'
    
    # Style of the subtitle
    subtitle_style: 'margin-top: 10px; page-break-after: always'
    
    # Style of the article titles
    article_title_style: 'font-size: 1.6em; margin-top: 1em; padding-top: 1em; border-top: 1px solid #999'
    
    # Style of the article link
    article_link_style: 'color: #555; text-decoration: none; border-bottom: 1px dotted font-size: 0.8em'
    
    # Style of the article content
    article_content_style: 'font-size: 0.8em'
    
    digest_format 속성은 요약의 출력 형식을 결정합니다. 시사통신에서 문장 요약을 보내려면 html을 선택하십시오. 항목별 모든 내용을 이메일 주소의 첨부파일로 보내려면 pdf을 선택하십시오.또 하나: configured an email address을 사용하면 PDF를 Kindle에 보낼 수 있습니다. 이 메커니즘은 RSS에서 제시한 전체 요약을 Kindle의 이메일 주소로 보낼 수 있습니다.
    RssUpdates 대상은 또한 Mercury Parser API과 통합하여 웹 페이지 내용을 자동으로 캡처할 수 있도록 제공한다. 나는 past article에서 RSS 원본을 어떻게 해석하고 PDF 요약을 전자 리더에 보내는지 소개했다.같은 메커니즘도 시사통신에 적용된다.뉴스레터 내용을 해석하려면 http.webpage Platypush 플러그인을 구성하면 됩니다.Mercury API는 파이썬 바인딩을 제공하지 않으므로 다음과 같은 몇 가지 JavaScript 종속성이 필요합니다.
    # Install Node and NPM, e.g. on Debian:
    apt-get install nodejs npm
    
    # Install the Mercury Parser API
    npm install [-g] @postlight/mercury-parser
    
    # Make sure that the Platypush PDF module dependencies
    # are installed if you plan HTML->PDF conversion
    pip install 'platypush[pdf]'
    
    그런 다음 프로젝트의 전체 내용을 분석하여 PDF 요약을 생성하려면 http.poll 구성을 다음과 같이 변경합니다.
    backend.http.poll:
        requests:
            - type: platypush.backend.http.request.rss.RssUpdates
              url: https://www.technologyreview.com/feed/
              title: MIT Technology Review
              poll_seconds: 86400
              digest_format: pdf     # PDF digest format
              extract_content: True  # Extract the full content of the items
    
    경고: RSS Feed에서 추출한 기사의 전체 컨텐트에는 두 가지 제한이 있습니다. 즉, 실용성 제한과 합법성 제한입니다.
  • 일부 사이트는 사용자가 로그인해야 글의 전체 내용을 표시할 수 있습니다.일부 사이트는 클라이언트가 이러한 검사를 수행한다. 해석기 API는 보통 그것들을 돌아갈 수 있다. 특히 글의 전체 내용이 실제로 클라이언트 요금 지불 벽 뒤에 숨겨져 있을 때.그러나 일부 사이트는 콘텐츠를 클라이언트에게 보내기 전에 서버에서 사용자 검사를 수행한다. 이런 상황에서 해상도 API는 일부 내용만 되돌려주거나 그 어떠한 내용도 되돌려주지 않을 수도 있다.
  • 일부 사법 관리 구역 내에서 비용 지불 벽 뒤의 글의 완전한 내용을 해석하는 것은 지적재산권 침해를 대표할 수 있음을 항상 기억해 주십시오.

  • 메일 전송 구성
    새 콘텐츠가 구독 RSS Feed에 발표될 때 Platypush는 NewFeedEvent 을 생성하고 ~/.local/share/platypush/feeds/cache/{date:time}_{feed-title}.[html|pdf]에서 요약 복사본을 만들어야 합니다.특히 NewFeedEvent은 사용자 정의 논리를 만드는 데 필요한 링크로 새로운 내용을 사용할 수 있을 때 주소 목록에 전자메일을 보냅니다.
    우선, 당신이 좋아하는 Platypush 메일 플러그인을 설정합니다.전자 우편을 보내는 것에 대해 말하자면, 당신은 주로 두 가지 선택이 있다.
  • mail.smtp 플러그인 - SMTP 서버를 통해 직접 이메일을 보내려는 경우오리너구리 배치:
  • mail.smtp:
        username: [email protected]
        password: your-pass
        server: smtp.gmail.com
        port: 465
        ssl: True
    
  • google.mail 플러그인 - 로컬 GMail API를 사용하여 이메일을 보내려는 경우이 경우 먼저 Platypush Google 모듈이 설치되어 있는지 확인합니다.
  • pip install 'platypush[google]'
    
    이 경우 Google Developers console에 항목을 만들고 OAuth 자격 증명을 다운로드해야 합니다.
  • 컨텍스트 메뉴 > OAuth 클라이언트 ID에서 자격 증명을 클릭합니다.
  • 이 생성되면 OAuth 2.0 클라이언트 ID 섹션에서 새 자격 증명을 볼 수 있습니다.다운로드 아이콘을 클릭하여 JSON 파일에 저장합니다.
  • 은 파일을 Platypush 장치/서버(예: ~/.credentials/google/client_secret.json)로 복사합니다.
  • 디바이스에서 다음 명령을 실행하여 애플리케이션을 승인합니다.
  • python -m platypush.plugins.google.credentials \
        "https://www.googleapis.com/auth/gmail.modify" \
        ~/.credentials/google/client_secret.json \
        --noauth_local_webserver
    
  • 은 브라우저에서 링크를 복제하고 구글 계정으로 로그인하며 응용 프로그램에 권한을 부여한다.
  • 이때 GMail 서비스는 Platypush automation에서 사용할 준비가 되어 있습니다.

    연결점
    현재 RSS 해석 논리와 메일 통합이 모두 준비되어 있으며, 우리는 NewFeedEvent 이벤트를 통해 그것들을 한데 붙일 수 있다.Platypush에서 이벤트를 설정하는 새로운 방법은 이 컴퓨터의 Python 스크립트인 이벤트와 과정의 사용자 정의 YAML 기반 문법이 너무 번거로워져서 유지보수와 작성이 불가능합니다. 깨끗하고 간단한 Python API로 돌아가는 것이 더 좋은 선택이 될 것 같습니다.
    Platypush 스크립트 디렉토리를 생성하고 초기화합니다(이 디렉토리가 없는 경우).
    mkdir -p ~/.config/platypush/scripts
    cd ~/.config/platypush/scripts
    touch __init__.py  # Initialize the root Python module
    
    그리고 NewFeedEvent에 새 갈고리를 만듭니다.
    $EDITOR rss_news.py
    
    import os
    from typing import List
    
    from platypush.event.hook import hook
    from platypush.message.event.http.rss import NewFeedEvent
    from platypush.utils import run
    
    # Path to your mailing list - a text file with one address per line
    maillist = os.path.expanduser('~/.mail.list')
    
    def get_addresses() -> List[str]:
        with open(maillist, 'r') as f:
            return [addr.strip() for addr in f.readlines()
                    if addr.strip() and not addr.strip().startswith('#')]
    
    
    # This hook matches:
    # - event_type=NewFeedEvent
    # - digest_format='html'
    # - source_title='MIT Technology Review'
    @hook(NewFeedEvent, digest_format='html', source_title='MIT Technology Review')
    def send_mit_rss_feed_digest(event: NewFeedEvent, **_):
        # The digest output file is stored in event.args['digest_filename']
        with open(event.args['digest_filename'], 'r') as f:
            run(action='mail.smtp.send',
                from_='[email protected]',
                to=get_addresses(),
                subject=f'{event.args.get("source_title")} feed digest',
                body=f.read(),
                body_type='html')
    
    기본 GMail 플러그인을 선택한 경우 다음을 수행할 수 있습니다.
    @hook(NewFeedEvent, digest_format='html', source_title='MIT Technology Review')
    def send_mit_rss_feed_digest(event: NewFeedEvent, **_):
        # The digest output file is stored in event.args['digest_filename']
        with open(event.args['digest_filename'], 'r') as f:
            run(action='google.mail.compose',
                sender='[email protected]',
                to=get_addresses(),
                subject=f'{event.args.get("source_title")} feed digest',
                body=f.read())
    
    요약을 PDF 형식으로 첨부로 보내려는 경우
    @hook(NewFeedEvent, digest_format='html', source_title='MIT Technology Review')
    def send_mit_rss_feed_digest(event: NewFeedEvent, **_):
        # mail.smtp plugin case
        run(action='mail.smtp.send',
            from_='[email protected]',
            to=get_addresses(),
            subject=f'{event.args.get("source_title")} feed digest',
            body='',
            attachments=[event.args['digest_filename'])
    
        # google.mail case
        run(action='google.mail.compose',
            sender='[email protected]',
            to=get_addresses(),
            subject=f'{event.args.get("source_title")} feed digest',
            body='',
            files=[event.args['digest_filename'])
    
    마지막으로 ~/.mail.list 파일을 만들고 줄마다 목표 이메일 주소가 있으며 명령줄이나 서비스로 platypush을 시작합니다.시작 후 얼마 지나지 않아 첫 번째 글의 이메일을 받아야 합니다. 만약 poll_seconds이 설정된 시간대에 새로운 글이 사용될 수 있다면 더 많은 항목을 받을 수 있습니다.

    좋은 웹페이지 즐겨찾기