Получите источник каналов с помощью Feedjira Gem

Я использую Feedjira Gem (Rails) для получения RSS-каналов с нескольких веб-сайтов. Все работает нормально, но единственное, что меня долго беспокоило, — это исходный канал (веб-сайт, с которого я беру rss).

Я хочу показать пользователям, с какого сайта приходит RSS. Прямо сейчас я получаю весь URL-адрес, но я хочу получить только то, что находится после www и до .com. В любом случае, я могу заставить его работать, или я могу получить источник канала из файла rss.

Я вижу это в файле rss, но не могу его захватить.

 <channel>
 <link>http://www.domain.com/</link>

А вот и вся моя модель.

class FeedEntry < ActiveRecord::Base
  acts_as_punchable

  def self.update_from_feed(feed_url)
    feed = Feedjira::Feed.fetch_and_parse(feed_url)
    add_entries(feed.entries)
  end

  private

  def self.add_entries(entries)
    entries.each do |entry|
      unless exists? :guid => entry.id
        create!(
            :name         => entry.title,
            :url          => entry.url,
            :guid         => entry.id,
            :source       => entry.url,
            :summary      => entry.summary,
            :published_at => entry.published,
        )
      end
    end
  end
end

Заранее спасибо!


person Community    schedule 24.11.2015    source источник


Ответы (1)


Вы можете получить исходник по

feed = Feedjira::Feed.fetch_and_parse(feed_url)
source = feed.url # -> http://www.domain.com/

Чтобы получить то, что находится после www и до .com, вы можете сделать что-то вроде этого

source = URI.parse(feed.url).host.split('.')[-2] # -> domain

Теперь поехали

  def self.update_from_feed(feed_url)
    feed = Feedjira::Feed.fetch_and_parse(feed_url)
    source = URI.parse(feed.url).host.split('.')[-2]
    add_entries(feed.entries, source)
  end

  private

  def self.add_entries(entries, source)
    entries.each do |entry|
      unless exists? :guid => entry.id
        create!(
            :name         => entry.title,
            :url          => entry.url,
            :guid         => entry.id,
            :source       => source,
            :summary      => entry.summary,
            :published_at => entry.published,
        )
      end
    end
  end

Это сработает!

person Van Huy    schedule 24.11.2015
comment
Спасибо за помощь :) - person ; 24.11.2015