Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी के साथ डाइजेस्ट स्क्रिप्ट को ईमेल करने के लिए RSS का निर्माण करें

रूबी के साथ डाइजेस्ट स्क्रिप्ट को ईमेल करने के लिए RSS का निर्माण करें मुझे कुछ ऐसा चाहिए

एक न्यूज़लेटर की स्थापना बहुत लंबे समय से मेरी टूडू सूची में रही है। आज वह दिन है जब मैं इसे पूरा करने जा रहा हूं। अगर आप साइन अप करना चाहते हैं तो आप यहां ऐसा कर सकते हैं।

मुझे वास्तव में लंबी-कॉपी वाले न्यूज़लेटर्स पसंद नहीं हैं। जो मुझे पसंद हैं वे दिलचस्प सामग्री के क्यूरेटेड डाइजेस्ट हैं। RubyWeekly दिमाग में आता है. तो क्या विस्टिया का ब्लॉग पचता है।

इन डाइजेस्ट को मैन्युअल रूप से एक साथ रखने में बहुत अधिक समय लगता है। लेकिन फुल-ऑटो जाना बहुत अवैयक्तिक है। तो मैं जो चाहता हूं वह अर्ध-स्वचालित प्रक्रिया है। मुझे एक स्क्रिप्ट चाहिए जो हमारे सबसे हाल के ब्लॉग पोस्ट लाएगी और एक HTML ईमेल आउटपुट करेगी जिसे मैं वैयक्तिकृत कर सकता हूं।

तो चलिए इसे बनाते हैं! यह एक मजेदार छोटा प्रोजेक्ट होगा जिसमें केवल एक उपयोगकर्ता को खुश करने के लिए - मुझे!

गेम प्लान

हमारी स्क्रिप्ट को कुछ चीज़ें करने की ज़रूरत है:

  1. हनीबैगर ब्लॉग के लिए RSS फ़ीड प्राप्त करें और पार्स करें

  2. श्रेणी के अनुसार उपयुक्त लेखों का चयन करें

  3. ईआरबी टेम्पलेट के माध्यम से लेखों के संग्रह को प्रस्तुत करें

इसे कमांड लाइन से चलाया जाएगा और इसके परिणामों को STDOUT पर प्रिंट किया जाएगा।

रूबी में फ़ीड फ़ेच करना और पार्स करना

क्या आप जानते हैं कि रूबी का मानक पुस्तकालय RSS और ATOM फ़ीड के उत्पादन और उपभोग के लिए एक मॉड्यूल के साथ आता है? हमारे उपयोग के मामले में यह बहुत आसान नहीं हो सका। यहां बताया गया है कि यह कैसे काम करता है:

require 'rss'

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

मॉड्यूल हमारे लिए फ़ीड भी लाता है। सेवा के बारे में बात करें!

श्रेणियों के साथ काम करना

मैं उन ग्राहकों के लिंक नहीं भेजना चाहता जिनमें उनकी रुचि नहीं है, इसलिए मैं श्रेणी के आधार पर लेखों को फ़िल्टर करने जा रहा हूं। जबकि रूबी की RSS लाइब्रेरी में categories है विधि, यह एक्सएमएल नोड ऑब्जेक्ट्स की एक सरणी देता है। मुझे श्रेणी के नाम चाहिए, इसलिए मैं RSS आइटम्स को Article . नामक डेकोरेटर क्लास में लपेटता हूं ।

अब मैं आसानी से केवल "कैसे करें" श्रेणी के लेखों का चयन कर सकता हूँ।

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") }

टेम्पलेट का प्रतिपादन

चूंकि यह बहुत अधिक मार्कअप के बिना एक ईमेल होने जा रहा है, मैं सिर्फ टेम्पलेटिंग के लिए ईआरबी का उपयोग करने जा रहा हूं। जैसा कि आप नीचे देख सकते हैं, मैंने टेम्प्लेट और रेंडरिंग कोड को DigestView नामक कक्षा में एक साथ रखा है। इतने छोटे, एकल-उद्देश्य वाले टेम्पलेट के लिए इसे एक अलग फ़ाइल में विभाजित करना अतिश्योक्तिपूर्ण लग रहा था।

अंतिम आउटपुट STDOUT को प्रिंट किया जाता है। यह मुझे आउटपुट को OSXs में पाइप करने देगा 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

आउटपुट इस तरह दिखता है:

रूबी के साथ डाइजेस्ट स्क्रिप्ट को ईमेल करने के लिए RSS का निर्माण करें हमारे ब्लॉग डाइजेस्ट जनरेटर का आउटपुट।

भविष्य का कार्य

इसके उत्पादन के लिए तैयार होने से पहले मुझे कुछ और करने की आवश्यकता होगी। लेकिन ये ज्यादातर हनीबैगर के लिए विशिष्ट अनुकूलन हैं, और जो अन्यथा बहुत उपयोगी नहीं होंगे। बाकी दिनों की मेरी स्ट्राइक लिस्ट ये है:

  1. टेम्प्लेट को सुंदर बनाएं और हमारे ईमेल प्रदाता के साथ उसका परीक्षण करें

  2. लिंक में Google Analytics ट्रैकिंग पैरामीटर जोड़ें

  3. टेम्पलेट में पोस्ट विवरण जोड़ें


  1. रूबी के साथ कमांड-लाइन एप्लिकेशन (सीएलआई) कैसे बनाएं?

    बहुत से लोग भूल जाते हैं कि रूबी ऐसे काम कर सकती है जो वेब एप्लिकेशन नहीं हैं। इस लेख में, मैं आपको दिखाना चाहता हूं कि इसका समाधान करने में मदद के लिए एक कमांड-लाइन एप्लिकेशन कैसे बनाया जाए! यहां कुछ कमांड-लाइन एप्लिकेशन दिए गए हैं जिनसे आप परिचित हो सकते हैं: psql rails bundler gem git कम

  1. टीसीमॉलोक के साथ रूबी की मेमोरी आवंटन की रूपरेखा

    रूबी में मेमोरी आवंटन कैसे काम करता है? रूबी को मेमोरी टुकड़ों में मिलती है, जिन्हें पेज कहा जाता है, यहां नई वस्तुएं सहेजी जाती हैं। फिर… जब ये पृष्ठ भर जाते हैं, तो अधिक स्मृति की आवश्यकता होती है। रूबी ऑपरेटिंग सिस्टम से malloc . के साथ अधिक मेमोरी का अनुरोध करती है समारोह। यह malloc फ़ंक्श

  1. रूबी के साथ एक पार्सर कैसे बनाएं

    पार्सिंग स्ट्रिंग्स के एक गुच्छा को समझने और उन्हें किसी ऐसी चीज़ में बदलने की कला है जिसे हम समझ सकते हैं। आप रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं, लेकिन वे हमेशा कार्य के लिए उपयुक्त नहीं होते हैं। उदाहरण के लिए, यह सामान्य ज्ञान है कि नियमित अभिव्यक्तियों के साथ HTML को पार्स करना शायद एक अच्छ