Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby로 이메일 다이제스트 스크립트를 위한 RSS 구축

Ruby로 이메일 다이제스트 스크립트를 위한 RSS 구축 이런 걸 원해요

뉴스레터 설정은 너무 오랫동안 내 할일 목록에 있었습니다. 오늘은 내가 그것을 실현하는 날이다. 가입을 원하시면 여기에서 하실 수 있습니다.

나는 긴 카피 뉴스레터를 별로 좋아하지 않는다. 내가 좋아하는 것은 흥미로운 콘텐츠의 선별된 요약입니다. RubyWeekly가 생각납니다. Wistia의 블로그 다이제스트도 마찬가지입니다.

이러한 다이제스트를 수동으로 통합하는 데 너무 많은 시간이 걸립니다. 그러나 완전 자동으로 가는 것은 너무 비인간적입니다. 그래서 제가 원하는 것은 반자동 프로세스입니다. 가장 최근 블로그 게시물을 가져와서 개인화할 수 있는 HTML 이메일을 출력하는 스크립트가 필요합니다.

그럼 빌드를 해보자! 나를 행복하게 해줄 단 한 명의 사용자와 함께하는 재미있는 작은 프로젝트가 될 것입니다!

게임 계획

스크립트는 몇 가지 작업을 수행해야 합니다.

  1. Honeybadger 블로그의 RSS 피드 가져오기 및 구문 분석

  2. 카테고리별로 적절한 기사 선택

  3. ERB 템플릿을 통해 기사 컬렉션 렌더링

명령줄에서 실행되고 결과를 STDOUT에 인쇄합니다.

Ruby에서 피드 가져오기 및 구문 분석

Ruby의 표준 라이브러리에는 RSS 및 ATOM 피드를 생성하고 사용하기 위한 모듈이 포함되어 있다는 사실을 알고 계셨습니까? 우리의 사용 사례에서는 이보다 더 간단할 수 없습니다. 작동 방식은 다음과 같습니다.

require 'rss'

feed = RSS::Parser.parse('https://www.honeybadger.io/blog/feed/')
feed.items.each do |item|
  puts item.title
end

모듈은 우리를 위해 피드를 가져오기도 합니다. 서비스에 대해 이야기하십시오!

카테고리 작업

구독자에게 관심이 없는 링크를 보내고 싶지 않으므로 카테고리별로 기사를 필터링하겠습니다. Ruby의 RSS 라이브러리에는 categories가 있습니다. 메서드에서 XML 노드 개체의 배열을 반환합니다. 카테고리 이름이 필요하므로 RSS 항목을 Article이라는 데코레이터 클래스로 래핑합니다. .

이제 "How To" 카테고리의 기사만 쉽게 선택할 수 있습니다.

require 'rss'
require 'delegate'

class Article < SimpleDelegator
  def category_names
    categories.map &:content
  end
end

feed = RSS::Parser.parse('https://www.honeybadger.io/blog/feed/')
articles = feed.items.map { |o| Article.new(o) }.select { |a| a.category_names.include?("How To") }

템플릿 렌더링

이것은 매우 많은 마크업이 없는 이메일이 될 것이기 때문에 템플릿에 ERB를 사용할 것입니다. 아래에서 볼 수 있듯이 템플릿과 렌더링 코드를 DigestView라는 클래스에 함께 넣었습니다. 이러한 작은 단일 목적 템플릿의 경우 별도의 파일로 분할하는 것은 너무 무리한 것 같았습니다.

최종 출력은 STDOUT에 인쇄됩니다. 이렇게 하면 출력을 OSX pbcopy로 파이프할 수 있습니다. 명령을 사용하여 출력을 클립보드에 복사하여 메일 시스템에 붙여넣을 수 있습니다.

require 'rss'
require 'delegate'
require 'erb'

class Article < SimpleDelegator
  def category_names
    categories.map &:content
  end
end

class DigestView
  attr_accessor :articles

  def initialize(articles)
    @articles = articles
  end

  def render
    ERB.new(template, 0, '>').result(binding)
  end

  def template
%{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head>
<body>
<h1>Headline: Replace me</h1>
<p>Intro paragraph: Replace me.</p>
<ul>
<% for article in @articles %>
  <li>
    <a href="<%= article.link %>">
  </li>
<% end %>
</ul>
</body>
</html>}
  end
end

feed = RSS::Parser.parse('https://www.honeybadger.io/blog/feed/')
articles = feed.items.map { |o| Article.new(o) }.select { |a| a.category_names.include?("How To") }
printf DigestView.new(articles).render

출력은 다음과 같습니다.

Ruby로 이메일 다이제스트 스크립트를 위한 RSS 구축 블로그 다이제스트 생성기의 출력

미래 작업

생산 준비가 되기 전에 조금 더 해야 합니다. 그러나 이것들은 대부분 Honeybadge와 관련된 사용자 정의이며 그렇지 않으면별로 유용하지 않습니다. 오늘의 남은 경고 목록은 다음과 같습니다.

  1. 템플릿을 예쁘게 만들고 이메일 제공업체를 통해 테스트하세요.

  2. 링크에 Google Analytics 추적 매개변수 추가

  3. 템플릿에 게시물 설명 추가