Загрузка данных Bright Local API в мое приложение Ruby on Rails - Документы API, написанные на PHP

1

Я пытаюсь создать приложение rails, которое извлекает данные из нескольких различных API инструментов SEO. Для Bright Local (см. Их документы API здесь - http://apidocs.brightlocal.com/) все примеры API-документов написаны на PHP, и я не могу их прочесть.

Итак, во-первых, чтобы задать конкретный вопрос, как написать этот пакетный запрос в Ruby:

<?php
use BrightLocal\Api;
use BrightLocal\Batches\V4 as BatchApi;

$api = new Api('[INSERT_API_KEY]', '[INSERT_API_SECRET]');
$batchApi = new BatchApi($api);
$result = $batchApi->create();
if ($result['success']) {
    $batchId = $result['batch-id'];
}

Кроме того, какие-либо предложения о том, как я могу заставить себя понюхать использование API в моих приложениях rails?

3 ответа

2

Наши документы в настоящее время показывают только примеры PHP - хотя мы планируем расширить их, а Ruby - один из тех языков, которые мы будем добавлять.

Простой запрос CURL командной строки для вышеуказанного PHP-кода будет выглядеть так:

curl --data "api-key=<YOUR API KEY HERE>" https://tools.brightlocal.com/seo-tools/api/v4/batch

и возвратит ответ вроде этого:

{"success":true,"batch-id":<RETURNED BATCH ID>}

Все наши конечные точки API отвечают либо POST, PUT, GET, либо DELETE. Также важно отметить, что всякий раз, когда данные отправляются с POST или PUT, они передаются как "param1 = value1 & param2 = value2" в теле запроса, а не в кодировке JSON.

Я вообще не знаю Ruby, я боюсь, но что-то вроде этого может сделать запрос, который вы хотите:

params = {"api-key" => "<YOUR API KEY>"}
Net::HTTP::Post.new("https://tools.brightlocal.com/seo-tools/api/v4/batch").set_form_data(params)
  • 0
    Спасибо за помощь, Эд, я ценю это!
1

Я также выполняю ярлык в моем приложении Rails. Я использую камень HTTParty. это то, что у меня есть до сих пор, и я могу совершать успешные звонки

это для получения идентификатора пакета:

api_key = YOUR_API_KEY
secret_key = YOUR_SECRET_KEY


request_url = "https://tools.brightlocal.com/seo-tools/api/v4/batch?api-key=#{api_key}"
response = HTTParty.post(request_url)

if response.code == 201
  batch_id = response['batch-id']
end

это пример запуска одного задания в пакете (параметры запроса входят в тело):

rank_url = "https://tools.brightlocal.com/seo-tools/api/v4/rankings/search"

response = HTTParty.post(rank_url, {
                  :body => {
                      "api-key" => api_key,
                      "batch-id" => batch_id,
                      "search-engine" => "google",
                      "country" => "USA",
                      "search-term" => "restaurant"
                    }
                })

Я не тестировал эту следующую часть, но теоретически именно так вы будете иметь дело с сигнатурами и истечения срока действия

expires = Time.now.to_i + 1800
string_to_sign = "#{api_key}.#{expires}"
binary_signature = OpenSSL::HMAC.digest('sha1', string_to_sign, secret_key)
url_safe_signature = CGI::escape(Base64.encode64(binary_signature).chomp)

Осталось только использовать запрос PUT для фиксации партии и запрос GET для извлечения данных внутри пакета.

РЕДАКТИРОВАТЬ: Понял, как правильно получить пропущенную подпись для заданий, для которых она нужна. (этот пример предназначен для проверки ранга локального поиска http://apidocs.brightlocal.com/#local-search-rank-checker)

expires = Time.now.to_i + 1800
concat = api_key + expires.to_s
sig = OpenSSL::HMAC.digest('sha1', secret_key, concat)
sig = CGI::escape(Base64.encode64(sig).chomp)

local_rank = "https://tools.brightlocal.com/seo-tools/api/v2/lsrc/add?api-key=#{api_key}&sig=#{sig}&expires=#{expires}"

response = HTTParty.post(local_rank, {
                :body => {
                  "name" => "pizza hut",
                  "search-terms" => "restaurant"
                }
              })
0

Поскольку вы используете Ruby, а не PHP, вам придется все реализовать самостоятельно. Пример, который вы даете, показывает пользователя оболочки PHP, созданной BrightLocal (и, похоже, только она есть в PHP).

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню