GrabDuck

Дружим Python и Yandex Rich Content API - Блог Hellsman'a

:

Yandex Rich Content API — это сервис от Яндекса, который позволяет получать информацию из контекстной системы Яндекса о практически любой странице в Интернет.

Согласно документации, Rich Content API может предоставить следующую информацию:

  • конечный адрес страницы (если были редиректы)
  • краткий или полный ПОЛЕЗНЫЙ текст веб-страницы
  • заголовок страницы
  • все ключевые изображения страницы
  • список видеороликов на странице

Данный API отлично подходит для новостных агрегаторов, т.к. он позволяет получить текст, без мусора в виде меню, комментариев и прочего. Также даст изображение к статье и прочую полезную информацию. В данном контексте и будем рассматривать.

Прежде чем начать работу с API нам нужно получить так называемый api-key. Данный ключ нужно использовать в каждом запросе к API, чтобы система нас могла идентифицировать. Если мы зададим не правильный ключ или обратимся к API вообще без ключа, то нам будет возвращен ответ с кодом ошибки «401 Unauthorized».

Чтобы получить ключ, нужно пройти авторизацию по данной ссылке: https://tech.yandex.ru/key/form.xml?service=rca

После регистрации вы получите длинный ключ, вроде такого:
rca.1.1.20150826T144419Z.a0c8b897a1dd2ee.03725c01639885sdf0bb80deac11c21ce3782a0

Его нужно сохранить, чтобы потом использовать.

Мы будем обращаться к Rich Content API, чтобы получить заголовок, описание, все изображения сайта, полный текст статьи на сайте. Приступим.

Весь ниже приведенный код написан с использованием Python3, операционная система Ubuntu 14.10.

Установим необходимы библиотеки, если их еще нет:

sudo pip3 install requests
Далее создаем файл с нашим скриптом, пусть он будет называться yrc-api.py
touch yrc-api.py
Откроем файл в любом удобном нам редакторе, н.р. в emacs.
emacs yrc-api.py
Приступим, для начала подключим нужную нам библиотеку requests. Данная библиотека будет выполнять сами запросы к API.

Также зададим основные константы:

  • YANDEX_RC_API_KEY — наш ключ, который мы получили у Яндекса
  • YANDEX_RC_API_URL — URL-адрес для обращения к API
  • URL — адрес веб-страницы, информацию о которой мы хотим получить
import requests

YANDEX_RC_API_KEY = '<ТУТ ВАШ API_KEY>'
YANDEX_RC_API_URL = 'http://rca.yandex.com/'
URL = 'https://hellsman.ru/novosti/android-novosti/vyshla-novaya-versiya-sborki-android-m-technical-preview-mpz79m'

Далее сформируем «загрузочную» информацию для обращения к API, согласно документации

<...>

payload = {'key':YANDEX_RC_API_KEY, 'url': URL, 'content':'full', 'full':1}

Таким образом мы определили какие параметры GET-запроса будут передаваться:

  • key — ключ к API
  • url — адрес интересующего нас сайта
  • content — с значением  full значит, что мы хотим получить полный текст содержимого страницы.
  • full — с значением значит что мы хотим получить максимум информации, т.е. все важные картинки, полный текст и описание.

Делаем запрос к API и получаем ответ с помощью библиотеки requests:

<...>
response = requests.get(YANDEX_RC_API_URL, params = payload)

Сервер Яндекса нам вернет ответ в формате JSON. Ответ будет приблизительно такой:

{
 "confidence":
   {"img":"high",
    "content":"high
   "},
 "title":"Вышла новая версия сборки Android M Technical Preview (MPZ79M)",
 "img":[
        "https://hellsman.ru/wp-content/uploads/2015/07/1432500663_m-e1436494542222.png
       "],
 "mime":"text/html",
 "finalurl":"https://hellsman.ru/novosti/android-novosti/vyshla-novaya-versiya-sborki-android-m-technical-preview-mpz79m",
 "origins":
     {"images":
       [{
          "url":"https://hellsman.ru/wp-content/uploads/2015/07/1432500663_m-e1436494542222.png","source":"og"}
        ]},
 "content":"С небольшой задержкой было выпущено на критику пользователей новая сборка Android M.\nПланировалось, что новая сборка будет доступна в конце июня, но Google задержал на 2 недели.",
 "url":"https://hellsman.ru/novosti/android-novosti/vyshla-novaya-versiya-sborki-android-m-technical-preview-mpz79m",
 "og_descr":"Android M новая сборка"
}

Работать с JSON на прямую не удобно, поэтому преобразуем его в типы и классы, которые есть у Python, а именно в словари и списки.

<...>
data = response.json()

Ну а теперь просто извлекаем нужные данные:

<...>

print('Заголовок: %s' % data['title'])
print('Описание: %s' % data['og_descr'])
print('Главная картинка: %s' % data['img'][0])
print('Полный текст статьи с сайта: %s'	% data['content'])
Собственно все. Полный текст скрипта:
import requests

YANDEX_RC_API_KEY = '<ВАШ api-key>'
YANDEX_RC_API_URL = 'http://rca.yandex.com/'
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
URL = 'https://hellsman.ru/novosti/android-novosti/vyshla-novaya-versiya-sborki-android-m-technical-preview-mpz79m'

payload = {'key':YANDEX_RC_API_KEY, 'url': URL, 'content':'full', 'full':1}

response = requests.get(YANDEX_RC_API_URL, params = payload)
data = response.json()

print('Заголовок: %s' % data['title'])
print('Описание: %s' % data['og_descr'])
print('Главная картинка: %s' % data['img'][0])
print('Полный текст статьи с сайта: %s'	% data['content'])

 

comments powered by HyperComments