Вы когда-нибудь задумывались, как получить сообщения пользователей на Medium, но не совсем понимали, как это сделать.

В этом посте я расскажу, как я получаю пост Medium из их GraphQL API.

Почему я начал исследовать проблему

Однажды моя девушка захотела вывести свой список сообщений Medium на сайты Wordpress.

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

Цель проста, попробуйте найти способ получить сообщение Medium через имя пользователя.

Хорошо, вызов принят, и пусть начинается взлом.

TL;DR

Вот версия TL; DR.

Если вы хотите получать сообщения с Medium, следующая функция javascript get_medium_post сделает за вас волшебство.

Официальный средний API

Все расследование начинается с официальных сайтов разработчиков Medium.

В настоящее время большинство веб-сервисов предоставляют определенные API, позволяющие разработчику дополнительно интегрировать свои сервисы.

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

Поскольку мы не можем найти какую-либо полезную информацию в официальной документации, я начал задаваться вопросом, как плагин WordPress получает сообщения Medium.

Новостная лента

Плагин WordPress, который мы использовали, называется Display Medium Posts.

После трассировки немного кода.

В следующем фрагменте показано, как произошло волшебство.

По сути, api.rss2json.com - это веб-служба, которая преобразует формат RSS в формат JSON.

Да, вы слышали ключевое слово RSS-канал.

Оказывается, несмотря на то, что Medium не предоставляет API для вывода списков сообщений, они предоставили RSS-канал, чтобы другие пользователи могли подписаться на действия других пользователей.

Формат URL-адреса RSS-канала: medium.com/feed/$username.

Теперь мы знаем, как плагин получает среднюю публикацию, давайте начнем исследовать, почему плагин показывает что-то, кроме пользовательской публикации.

Расследование

После обсуждения с моими лучшими друзьями, Google, это привело меня к следующему блогу.



Как предполагается в блоге, этого можно ожидать от Medium.

Средний RSS-канал будет содержать не только сообщения пользователя, но и действия.

К счастью, в блоге также предлагается простой способ решения этой проблемы.

Идея очень проста, проверьте, пусто ли поле категорий.

Смягчение

Просто следуйте приведенному выше фрагменту, чтобы плагин WordPress отфильтровал элементы, не относящиеся к публикации.

В мир GraphQL

Поигравшись с RSS-каналом, я обнаружил другое поведение.

RSS-канал покажет только последние 10 действий, но не предоставит никаких вариантов нумерации страниц.

Что значит,

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

Теперь я знаю, что RSS-канал - это тупик. Нам нужно найти другой способ разместить пост.

Итак, я открываю консоль разработчика Chrome, выпиваю чашку кофе, морщу палец и молюсь за лучшее.

После наблюдения за результатом какое-то время.

Воала, у нас есть победитель.

Среднее использование GraphQL. Повезло тебе.

Поскольку я использую режим инкогнито, который подразумевает, что GraphQL вообще не нуждается в какой-либо проверке аутентификации, мы можем просто повторно отправить запрос GraphQL и проанализировать данные ответа.

Копайте глубже в GraphQL

Фактически, к этому моменту другие функции выполнены, но мне все еще нужно кое-что подправить, чтобы сделать мой маленький скрипт более надежным и удобным в обслуживании.

Свернуть запрос

Исходный запрос GraphQL довольно большой (около 14 КБ), что составляет

  • трудно читать
  • трудно поддерживать

Поэтому я минимизировал запрос GraphQL до небольшого размера, чтобы мы могли получить следующие данные

  • Ссылка на сайт
  • Автор
  • Thundernail
  • Заголовок
  • Дата публикации
  • Пагинация

Ниже приведен фрагмент кода для свернутого запроса GraphQL.

Заключительные слова

Путешествие заканчивается, когда я, наконец, завершил запрос GraphQL и развернул скрипт для своих рабочих процессов Cloudflare.

Должен сказать, я не ожидал, что на изучение этой небольшой проблемы у меня уйдет так много времени.

Но весь процесс бесценен и радостен.

Мне нравится копаться в Medium GraphQL API, и я также понимаю, насколько мощным является GraphQL.

Надеюсь, этот пост поможет вам, и любые отзывы приветствуются.