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-टू-ईमेल डाइजेस्ट टूल बनाएं हमारे ब्लॉग डाइजेस्ट जनरेटर का आउटपुट।

भविष्य का काम

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

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

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

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


  1. शक्तिशाली रूबी CLI टूल्स बनाएं: चरण-दर-चरण गाइड शक्तिशाली रूबी CLI टूल्स बनाएं: चरण-दर-चरण गाइड

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

  1. गूगल TCMalloc के साथ रूबी की मेमोरी आवंटन प्रोफाइलिंग गूगल TCMalloc के साथ रूबी की मेमोरी आवंटन प्रोफाइलिंग

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

  1. रूबी पार्सिंग में मास्टर करें: स्क्रैच से अपना खुद का पार्सर बनाएं रूबी पार्सिंग में मास्टर करें: स्क्रैच से अपना खुद का पार्सर बनाएं

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