Medusa Api: Написание Полнотекстового Rss

Как и многих людей, использующих RSS, меня расстраивают каналы, которые не возвращают всю историю, а только ее короткую версию.

В этом случае нет возможности прочитать ленту в автономном режиме.

Медуза.

io не является исключением: текст приходит урезанным, и приходится каждый раз переключаться с читалки на браузер, чтобы прочитать одну новость.

Особенно ужасно это выглядело, когда у Медузы не было нормальной мобильной версии; веб-версия на телефоне работала очень медленно.

Существуют различные сервисы по парсингу html в rss, но когда я наткнулся консольный клиент для Медузы , у меня сразу возник вопрос: какой API там используется и можно ли его использовать для написания собственного приложения?

Medusa API: написание полнотекстового RSS

API Далеко ходить не пришлось, код консольного приложения опубликовано на github и представляет собой js, который обращается к необходимому API.



Получение списка новостей

https://meduza.io/api/v3/searchЭchrono=news&page=0&per_page=10&locale=ru хроно - принимает значения новости, открытки, статьи, фигуры или многоугольник , в зависимости от категории, которую мы хотим получить; страница - номер страницы; на страницу — количество записей на странице; локаль - локаль RU или ru ;

Получайте индивидуальные новости

https://meduza.io/api/v3/shapito/2015/06/02/vyshel-neofitsialnyy-terminalnyy-klient-meduzy Здесь просто подставляется url, полученный из предыдущего пункта.

Идея Получите исходный RSS-канал по адресу https://meduza.io/rss/all , но вместо обрезанной новости подставьте текст новости, полученной через API. Пример реализации (прототип) Я взял Ruby и написал код для анализа исходного RSS-канала:

  
  
   

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

А также код, который анализирует 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="http:// meduza.io/image/ ') end end doc.to_xml end end puts Meduza.generate

При этом меняем относительные URL-адреса изображений на абсолютные с помощью метода gsub .

Применение Минималистичное приложение было написано на Синатра , который можно развернуть, например, на хостинге геройку и пользуйтесь им на здоровье (и к тому же совершенно бесплатно).

Подобный сервис поможет избавиться от засыпания приложений на Heroku этот .

Исходный код приложения опубликовано на github , Спасибо за внимание! P.S. Ссылка на рабочее приложение meduza.herokuapp.com/rss (пока бесплатная учетная запись Heroku может справиться с нагрузкой).

Теги: #медуза #rss #api #ruby #heroku #Sinatra #JavaScript #никто не читает теги #api

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.