Эта статья изначально была опубликована в моем личном блоге.

В этом руководстве мы рассмотрим, как выполнять поиск в Twitter, Instagram, Tumblr и Pinterest. Мы будем настраивать сервер с express с простой настройкой, чтобы продемонстрировать функциональные возможности.

Вы можете найти код этого руководства в этом репозитории GitHub.

Настройка проекта

Создайте каталог для проекта и переключитесь на него:

mkdir social-search 
cd social-search

Затем давайте инициализируем его с помощью NPM:

npm init

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

После этого мы установим несколько необходимых пакетов:

npm i express axios dotenv

Где express - для нашего сервера, axios - для отправки запросов, которые мы будем использовать с некоторыми платформами социальных сетей, и dotenv, которые мы будем использовать для хранения необходимых токенов в .env.

Затем создайте в корне файл с именем index.js со следующим содержимым:

require('dotenv').config()
const app = require('express')()
const axios = require('axios')

app.listen(3000, function () {
    console.log("started server for social search!")
})

Это создаст простой сервер, который прослушивает порт 3000. Последнее, что нам нужно сделать для запуска нашего сервера, - это добавить start скрипт в package.json:

"scripts": {
    "start": "node index.js"
  },

Вот и все! Чтобы протестировать наш сервер, запустим:

npm start

Если все работает правильно, вы увидите сообщение «Запущен сервер для поиска в соцсетях!»

Теперь мы готовы начать поиск в социальных сетях.

Поиск в Twitter

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

Затем вам будет предоставлен ключ API и секрет API. Обязательно скопируйте их и сохраните где-нибудь.

После создания приложения перейдите на вкладку «Ключи и токены» на странице приложения. В разделе «Токены аутентификации» нажмите «Создать» для маркера доступа и секрета. Вам дадут два дополнительных ключа, которые нужно где-то скопировать и сохранить.

Вернемся к нашему проекту, создадим .env файл, в котором будут храниться ключи:

TWITTER_API_KEY= 
TWITTER_API_SECRET= 
TWITTER_ACCESS_TOKEN= 
TWITTER_ACCESS_TOKEN_SECRET=

где первые 2 ключа - это первые 2, которые вы получили, а вторые 2 - это те, которые вы сгенерировали.

Чтобы легко получить доступ к API Twitter, мы воспользуемся библиотекой twitter-api-client. Он предоставляет простой в использовании интерфейс для доступа к API Twitter. Нам нужно сначала установить его с помощью NPM:

npm i twitter-api-client

Теперь перейдите к index.js, потребуйте библиотеку и инициализируйте клиент Twitter:

const TwitterClient = require('twitter-api-client').TwitterClient

const twitterClient = new TwitterClient({
    apiKey: process.env.TWITTER_API_KEY,
    apiSecret: process.env.TWITTER_API_SECRET,
    accessToken: process.env.TWITTER_ACCESS_TOKEN,
    accessTokenSecret: process.env.TWITTER_ACCESS_TOKEN_SECRET,
  });

Поскольку мы добавили в начало файла require('dotenv').config(), теперь мы можем использовать ключи, которые мы добавили с .env по process.env.

Затем мы добавим новый маршрут GET, который принимает параметр query, который мы будем использовать для поиска в Twitter:

app.get('/twitter/:query', function (req, res) {
});

Внутри функции обратного вызова для этого маршрута нам нужно искать в твиттере твиты, содержащие данный запрос. Для поиска твитов мы будем использовать twitterClient.tweets.search, который принимает в качестве параметра объект, включающий различные свойства. Мы будем использовать q, через который мы передадим запрос:

const query = req.params.query

twitterClient.tweets.search({
    q: query
}).then((response) => {
    res.send(response)
}).catch((err) => {
        console.error(err)
        res.status(500).send('An error occurred, please try again later.')
})

Когда мы получаем ответ, мы просто отправляем его обратно. Если возникает ошибка, мы выводим ее на консоль и отправляем ответ со статусом 500.

Вот и все! Чтобы проверить это, запустите сервер:

npm start

Затем перейдите по указанному нами маршруту, передав ему любой запрос. Например, localhost: 3000 / twitter / cats. Если все сделано правильно, вы должны увидеть объект JSON, содержащий массив твитов.

Вы можете посмотреть документацию для twitter-api-client, чтобы узнать больше о параметрах, которые вы можете передать, ответах и ​​т. Д.

Поиск в Instagram

API-интерфейсы Instagram - это беспорядок. Короче говоря, теперь есть Hashtag Search, к которому можно получить доступ через Instagram Graph API. Однако это позволяет вам выполнять поиск только по сообщениям определенного пользователя, но не по поиску в целом. Не говоря уже о том, что этому API требуется доступ к множеству конечных точек, чтобы, наконец, получать сообщения с запрашиваемым хэштегом.

Есть еще один неофициальный способ поиска в Instagram. На странице https://www.instagram.com/explore/tags/KEYWORD/?__a=1 вы можете найти конечную точку, где, когда вы замените KEYWORD запросом, вы получите ответ JSON со всеми сообщениями. используя хэштег.

Мы создадим новую конечную точку, которая позволит нам искать в Instagram:

app.get('/instagram/:query', function (req, res) {
	
});

Внутри обратного вызова мы будем использовать axios для отправки запроса GET на указанную выше конечную точку, а затем отправим обратно полученный ответ:

const query = req.params.query

axios.get('https://www.instagram.com/explore/tags/' + query + '/?__a=1')
        .then((response) => {
            res.send(response.data)
        })
        .catch((err) => {
            console.error(err)
            res.status(500).send('An error occurred, please try again later.')
        })

Вот и все. Чтобы проверить это, запустите сервер:

npm start

Затем перейдите к только что созданному маршруту, передав ему нужный запрос. Например, localhost: 3000 / instagram / cats. Если все было сделано правильно, ответом будет объект JSON с сообщениями с хэштегом cats.

Поиск в Tumblr

Для поиска в Tumblr сначала зарегистрируйте новое приложение. Для этого вам понадобится аккаунт в tumblr. Вам нужно будет ввести такую ​​информацию, как название приложения, URL-адрес приложения (вы можете просто ввести http://example.com) и т. Д.

После этого вы будете перенаправлены на страницу приложений, где будет показано только что созданное приложение. Вы можете увидеть Consumer Key OAuth. Скопируйте его и добавьте в .env:

TUMBLR_CONSUMER_KEY=

Для поиска постов по тегам мы можем использовать /tagged endpoint. Мы передадим ему ключ API, который является ключом потребителя, который мы только что добавили в .env, и тег, который является запросом, который мы ищем.

Сначала мы создадим новый маршрут GET:

app.get('/tumblr/:query', function (req, res) {
    const query = req.params.query
});

Как обычно, мы создаем маршрут, который принимает запрос в качестве параметра.

Затем мы отправим GET-запрос на /tagged конечную точку Tumblr, используя axios параметр, как описано выше:

axios.get('https://api.tumblr.com/v2/tagged?tag=' + query + '&api_key=' + process.env.TUMBLR_CONSUMER_KEY)
        .then((response) => {
            res.send(response.data)
        })
        .catch((err) => {
            console.error(err)
            res.status(500).send('An error occurred, please try again later.')
        })

Как и раньше, мы просто отправляем обратно полученный ответ.

Чтобы проверить это, запустите сервер:

npm start

Затем перейдите к созданному нами маршруту, передав ему нужный запрос. Например, localhost: 3000 / tumblr / cats. Если все работает правильно, ответом будет JSON-ответ с массивом сообщений с тегом cats.

Поиск в Pinterest

У Pinterest нет API, который позволял бы искать их пины. Для поиска через Pinterest нам нужно использовать API пользовательского поиска Google JSON. Этот API позволяет получать результаты поиска в формате JSON. Мы будем использовать его для поиска в Pinterest. Это не оптимально, но на момент написания статьи это самый простой способ. Обратите внимание, что этот API предоставляет 100 запросов в день бесплатно, тогда вам будет выставлен счет в размере 5 долларов за каждые дополнительные 1000 запросов.

Для начала вам нужно получить API-ключ. Просто нажмите кнопку Получить ключ. Вам будет предложено создать проект или использовать существующий, после чего вам будет предоставлен ключ API. Скопируйте ключ и добавьте его в .env:

CUSTOM_SEARCH_API_KEY=

Затем вам нужно будет создать Программируемый поиск. Сделать это можно здесь. Вам нужно будет ввести URL-адрес сайта, который вы будете искать. В нашем случае это будет pinterest.com. Вы также можете изменить язык и имя программируемого поиска. После этого нажмите Создать. Вы попадете на страницу, которая покажет вам множество вариантов. Выберите кнопку Панель управления.

Войдя в панель управления, скопируйте идентификатор поисковой системы и добавьте его в .env:

CUSTOM_SEARCH_CX=

Нам нужно будет передать это в качестве параметра при отправке запросов к API.

Начнем с создания маршрута GET для запроса Pinterest:

app.get('/pinterest/:query', function (req, res) {
    const query = req.params.query
    
    
});

Затем мы отправим запрос в конечную точку API пользовательского поиска, передав ей ключ API, CX, который является идентификатором поисковой системы, и запрос, который мы ищем:

axios.get('https://www.googleapis.com/customsearch/v1?key=' + process.env.CUSTOM_SEARCH_API_KEY + 
        '&cx=' + process.env.CUSTOM_SEARCH_CX + '&q=' + query)
        .then((response) => {
            res.send(response.data.items)
        })
        .catch((err) => {
            console.error(err)
            res.status(500).send('An error occurred, please try again later.')
        })

Как обычно, мы просто отправляем обратно полученный ответ.

Чтобы проверить это, запустите сервер:

npm start

Затем перейдите к только что созданному маршруту, передав ему запрос. Например, localhost: 3000 / pinterest / cats. Вы увидите массив JSON, каждый объект которого имеет заголовок булавки, ссылку на него и другую информацию.

Заключение

В этом уроке мы просмотрели поиск в Twitter, Instagram, Tumblr и Pinterest. В следующем мы рассмотрим поиск других платформ для социальных сетей!