Jellyfish API:フルテキストRSSの作成

RSSを使用する他の多くの人と同様に、私はニュースを完全にではなく、短いバージョンで返すフィードにうんざりしています。 この場合、フィードをオフラインで読むことはできません。



Meduza.ioも例外ではありません。テキストが削除されるため、ニュースを読むには毎回リーダーからブラウザーに移動する必要があります。 これは、Medusaに通常のモバイルバージョンがなく、電話のWebバージョンが非常に遅い場合に特にひどく見えました。



rssでhtmlを解析するためのさまざまなサービスがありますが、Medusaのコンソールクライアントに遭遇したとき、すぐに質問がありました。そこではどのAPIが使用され、それを使用してアプリケーションを作成できますか?



画像



API



遠くまで行く必要はありませんでした。コンソールアプリケーションコードはgithubに投稿されており 、目的のAPIにアクセスするjs-kuです。



ニュースリストの取得



https://meduza.io/api/v3/search?chrono=news&page=0&per_page=10&locale=en

chrono-取得する見出しに応じて、 ニュース、カード、記事、シャピト、またはポリゴンの値を取得します。

page-ページ番号。

per_page-ページ上の投稿の数。

locale-ロケールruまたはen ;



別のニュースを入手する



https://meduza.io/api/v3/shapito/2015/06/02/vyshel-neofitsialnyy-terminalnyy-klient-meduzy

ここでは、最後の段落から取得したURLが単純に置換されます。



アイデア



https://meduza.io/rss/allで元のrssフィードを取得しますが、切り捨てられたニュースの代わりにAPIを介して受信したニューステキストを置き換えます。



実装例(プロトタイプ)



私はルビーを取り、元のrssフィードを解析するためのコードをいくつか書きました。



Nokogiri::XML(open('https://meduza.io/rss/all'))
      
      





また、1つのニュース項目のjsonを解析するコード:



 JSON::parse(open('https://meduza.io/api/v3/' + post_url).read)['root']['content']['body']
      
      







一方を他方に置き換えて、次のようなものを取得します。



 require 'open-uri' require 'json' require 'nokogiri' $meduza = 'https://meduza.io' $meduza_rss = $meduza + '/rss/%s' $meduza_api = $meduza + '/api/v3/%s' class Meduza def Meduza.generate(feed = 'all') doc = Nokogiri::XML(open($meduza_rss % feed)) doc.xpath('/rss/channel/item').each do |item| post_id = item.xpath('link').inner_text.gsub(/^#{$meduza}\//, '') json = JSON::parse(open($meduza_api % post_id).read) item.search('description').each do |description| description.content = json['root']['content']['body'].gsub('src="/image/', 'src="//meduza.io/image/') end end doc.to_xml end end puts Meduza.generate
      
      





途中で、 gsubメソッドを使用して画像の相対URLを絶対に変更します。



使用する



たとえば、 herokuホスティングにデプロイして健康に使用できる(そして完全に無料の)ミニマルなシナトラアプリケーションが作成さています。 herokuの「眠りに落ちる」アプリケーションを取り除くことは、 このようなサービスに役立ちます。



アプリケーションのソースコードはgithub投稿されています。 ご覧いただきありがとうございます!



PS動作中のアプリケーションmeduza.herokuapp.com/rssへのリンク(無料のherokuアカウントが負荷に耐えられる限り)。



All Articles