0
Answered

API подсказок на PHP

Гена 3 years ago updated by Антон 2 years ago 8

А вот без Google_Client никак не смогли обойтись!!!!! почему не сделали просто нормальную библиотеку без зависимостей! для php 5.0 например! Не всем нравится перелопачивать не только ваши классы, а еще и вторую библиотеку от гугла! Это всего-лишь API т.е запрос-ответ!

Answer

+1
Answer
Answered

Гена, можно и без гугло-клиента: пример на голом ПХП.

+1
Answer
Answered

Гена, можно и без гугло-клиента: пример на голом ПХП.

спасибо!!!!!!!!!!

Помогите.

Внедрил класс SuggestClient на сайт
И запрос сделал как в примере тестовые
Но у меня нет ответа (данных), ошибки тоже не выдает...

Нужно ли еще что-то подключать?


п.с. при помощи jquery библиотеки данные приходили...


Покажите, пожалуйста, код.

Либо дайте сайт, на котором можно посмотреть ваше подключение.

дебаг согласно примеру (разбираю в классе):


1.переменная $options (public function suggest) содержит:

 http
    method = POST
    header
        0 = Content-type: application/json
        1 = Authorization: Token 746509fbafc513156de…
    content = {"query":"\u043c\u043e\u0441\u043a\u0432…

говорит о том что опции есть


2.далее конструкция: $this->url.$resource выдает адрес:

https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address
адрес верный


3.далее $context = Resource id #46

не знаю - так или не так - но выдал так...


В ИТОГЕ:

$result = file_get_contents($this->url . $resource, false, $context);

ПУСТОЙ!!!

Файл с классом

namespace Site;
Class SuggestClient
{
    private $url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/';
    private $token = 'тут токен';
    public function suggest($resource, $data) {
        $options = array(
            'http' => array(
                'method'  => 'POST',
                'header'  => array(
                    'Content-type: application/json',
                    'Authorization: Token ' . $this->token,
                    ),
                'content' => json_encode($data),
            ),
        );
        $context = stream_context_create($options);
        $result = file_get_contents($this->url . $resource, false, $context);
        return $result;
    }
    public function address($query, $count, $from_bound = NULL, $to_bound = NULL) {
        $data = array(
            'query' => $query,
            'count' => $count
        );
        if (!is_null($from_bound)) {
            $data['from_bound'] = array('value' => $from_bound);
        }
        if (!is_null($to_bound)) {
            $data['to_bound'] = array('value' => $to_bound);
        }
        return json_decode($this->suggest("address", $data));
    }
}

а это на станице сайта

$dadata = new Site\SuggestClient();
            
    $suggestQuery = 'москва серпуховская';
    if (count($argv) > 1) {
        $suggestQuery = $argv[1];
    }
    $suggestCount = 2;
    if (count($argv) > 2) {
        $suggestCount = $argv[2];
    }
    $suggestFromBound = NULL;
    if (count($argv) > 3) {
        $suggestFromBound = $argv[3];
    }
    $suggestToBound = NULL;
    if (count($argv) > 4) {
        $suggestToBound = $argv[4];
    }
    $suggestResp = $dadata->address($suggestQuery, $suggestCount, $suggestFromBound, $suggestToBound);

Больше всего меня смутило вот эта часть кода в вашем примере:

print "Query: " . $query . "\n";
print "Suggestions: \n";
foreach ($resp->suggestions as $suggestion) {
    print $suggestion->unrestricted_value . "\n";
}

$resp->suggestions

suggestions - это что?


$suggestion->unrestricted_value

unrestricted_value - и это что?

У меня ваш пример корректно работает. Если добавить вывод результата:

$suggestResp = $dadata->address($suggestQuery, $suggestCount, $suggestFromBound, $suggestToBound);
var_dump($suggestResp);

Выдает правильный ответ:

object(stdClass)#2 (1) {
  ["suggestions"]=>
  array(2) {
    [0]=>
    object(stdClass)#3 (3) {
      ["value"]=>
      string(50) "г Москва, ул Серпуховская Б."
      ["unrestricted_value"]=>
      string(50) "г Москва, ул Серпуховская Б."
      ["data"]=>
      object(stdClass)#4 (72) {
        ["postal_code"]=>
        string(6) "115093"
        ["country"]=>
        string(12) "Россия"
        ["region_fias_id"]=>
        string(36) "0c5b2444-70a0-4932-980c-b4dc0d3f02b5"
        ["region_kladr_id"]=>
        string(13) "7700000000000"
        ["region_with_type"]=>
        string(15) "г Москва"
        ["region_type"]=>
        string(2) "г"
        ["region_type_full"]=>
        string(10) "город"
        ["region"]=>
        string(12) "Москва"
        ...