Platypush를 사용하여 RSS 소스에서 맞춤형 뉴스레터 제공
26360 단어 platypushautomationnewsletterrss
시사 통신을 올리다
과거에 내 글을 읽은 사람들은 내가 RSS 구독에 열광하는 소비자라는 것을 알 수 있다.비록 이 기술은 21년의 역사를 가지고 있지만, 중요한 정보를 제공할 때, 그들은 매우 잘하고, 어떠한 소음과 추적기도 없으며, 매우 높은 수준의 통합, 즉 간단한 XML 문서를 제공한다.그러나, 내가 최선을 다해 나의 모든 자료 출처를 갱신하였음에도 불구하고, 많은 잠재적인 재미있는 내용이 불가피하게 누락되었다 - 이것이 바로 시사통신이 개입하는 곳이다. 왜냐하면 그들은 주어진 시간 범위 내에서 생성된 모든 내용을 필터하고 그룹을 나누어 정기적으로 당신의 우편함으로 보내기 때문이다.
나의 이상적인 해결 방안은 이 두 세계의 가장 좋은 측면을 결합시키는 것이다. RSS 구독의 유연성, 그리고 내용과 원본을 필터하고 집합하는 유연성, 그리고 내가 좋아하는 모든 형식 (HTML, PDF, MOBI...) 으로 우리 집 입구에서 완전한 가방을 납품하는 것이다.이 문서에서 몇 가지 도구를 사용하여 이 목표를 실현하는 방법을 보여 드리겠습니다.
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에서 추출한 기사의 전체 컨텐트에는 두 가지 제한이 있습니다. 즉, 실용성 제한과 합법성 제한입니다.메일 전송 구성
새 콘텐츠가 구독 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 자격 증명을 다운로드해야 합니다.~/.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
연결점
현재 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
이 설정된 시간대에 새로운 글이 사용될 수 있다면 더 많은 항목을 받을 수 있습니다.
Reference
이 문제에 관하여(Platypush를 사용하여 RSS 소스에서 맞춤형 뉴스레터 제공), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/blacklight/deliver-customized-newsletters-from-rss-feeds-with-platypush-3mip텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)