Форум программистов, компьютерный форум, киберфорум
PHP: API, боты
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
1

Отправка запроса и прием ответа

23.06.2017, 16:31. Показов 6105. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
API Яндекс директ.

Надо отправить запрос, получить ответ и как то спарсить ответ.

Вопрос в самом базовом моменте - как отправить, как принять, как спарсить?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
    $url='https://api-sandbox.direct.yandex.com/json/v5/campaigns';
 
    $REQUEST=array(
        'method'=>'get',
        'params' => array(
            'SelectionCriteria' => array('States' => array('ON') ),
            'FieldNames' => array(
              'Id',
              'Name'
            )
        )
    );
 
    $HEADER=array(
        'Accept-Language: ru',
        'Content-Type: application/json; charset=utf-8',
        'Authorization: Bearer 0f0f0f0f0f0f0f0f0f' //тут токен
    );
 
    $opts = array('http' =>
          array(
          'method'  => 'POST',
          'header'  => $HEADER,
          'content' => $REQUEST
          )
        );
    
    $context = stream_context_create($opts);
    $result = file_get_contents($url, false, $context);
    echo $result;
?>
Вот я вроде передаю, дальше мне приходит ответ в result ( ? ).
PHP
1
{"error":{"request_id":"5552368022395736682","error_string":"Некорректный запрос","error_code":"8000","error_detail":"Невозможно обработать JSON"}}
Добавлено через 35 минут
Цитата Сообщение от vino0s Посмотреть сообщение
$REQUEST=array(
* * * * 'method'=>'get',
* * * * 'params' => array(
* * * * * * 'SelectionCriteria' => array('States' => array('ON') ),
* * * * * * 'FieldNames' => array(
* * * * * * * 'Id',
* * * * * * * 'Name'
* * * * * * )
* * * * )
* * );
Тут изменил
PHP
1
2
3
4
5
6
7
8
9
10
11
    $REQUEST=array(
    'method' => 'get',
    'params' => [
        'SelectionCriteria' => [
            
        ],
        'FieldNames' => [
                'Id',
                'Name'
            ]
     ]);
В ответ получаю:
Array



и несколько пустых строк, с различной длиной (может табуляция)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2017, 16:31
Ответы с готовыми решениями:

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

Отправка POST-запроса и его прием
var http: TIdHTTP; strIP2: TStringList; strIP: string; begin http :=...

Отправка POST запроса и получение ответа
Есть проблема. Нужно отправить на сайт POST запрос и в зависимости от этого запроса сайт выдает...

Отправка http запроса и получение ответа
я понимаю что есть дофига тем про это, я честно гуглила и искала, но находила в основном код без...

12
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
24.06.2017, 13:11 2
Можно попробовать примеры https://tech.yandex.com/direct... s-docpage/
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
24.06.2017, 17:12  [ТС] 3
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$url = 'https://api-sandbox.direct.yandex.com/json/v5/';
//$header = 'Changes';
//$header = 'Dictionaries';
//$header = 'AgencyClients'; //Сервис получить клиентов агенства
//$header = 'Clients'; //Сервис клиентов
//$header = 'AudienceTargets'; //Сервис аудитории
//$header = 'RetargetingLists'; //Сервис ретаргетин
//$header = 'AdImages'; //Сервис статистики
//$header = 'Reports'; //Сервис статистики
$header = 'ads'; //Сервис объявлений
//Получение объявлений кампании
//$zapros = '{"method":"get","params":{"SelectionCriteria":{ "CampaignIds": ["222277"]},"FieldNames":["CampaignId", "AdGroupId", "Id"]}}';
//Добавление объявления
$zapros = '{"method":"add","params":{"Ads": [{ "TextAd": {"Text" : "Тест текст", "Title" : "Тест Заголовок", "Href" : "http://directolog-plus.ru", "Mobile" : "NO"}, "AdGroupId": "2477388" }]}}';
//Изменение имени кампании по Id
//$header = 'campaigns'; //Сервис кампаний
//$zapros = '{"method":"update","params":{ "Campaigns": [{"Id":"222277","Name":"Test 1" }]}}';
//Получение имен кампаний
//$zapros = '{"method":"get","params":{"SelectionCriteria":{},"FieldNames":["Name"]}}';
//Добавление кампании
//$zapros = '{"method":"add","params":{"Campaigns": [{"Name":"Test 4", "StartDate":"2017-06-25", "DailyBudget": { "Amount" : "300000000", "Mode" : "STANDARD" }, "TextCampaign": { "BiddingStrategy" : { "Search" : { "BiddingStrategyType": "LOWEST_COST_GUARANTEE" }, "Network" : {"BiddingStrategyType": "SERVING_OFF"} } } }] }}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url.$header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $zapros);  //Post Fields
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = [
    'POST /json/v5/'.$header.'/ HTTP/1.1',
    'Host: api-sandbox.direct.yandex.com',
    'Authorization: Bearer '.$token,
    'Accept-Language: ru',
    'Client-Login: '.$clientlogin,
    'Content-Type: application/json; charset=utf-8'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$server_output = curl_exec ($ch);
curl_close ($ch);
 
print_r($server_output);
Вот, нашел какой то cURL, с ним получается.
0
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
24.06.2017, 21:01 4
vino0s, ты переменную $REQUEST в json не конвертируешь, а просто передаешь на сервер Array. Используй json_decode
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
24.06.2017, 22:04  [ТС] 5
Давай тут подробнее, как раз на этом этапе завис:

PHP
1
2
3
4
5
6
7
8
    <?$json = json_decode($server_output, TRUE)->result->Ads;
echo "<p>Че не так ";
echo $json[1]->Id;
foreach ($json->result->Ads as $obj):
    echo '<br>'.$obj->Id;
endforeach;
print_r( "Че не так </p>");
curl_close ($ch);?>
Вот до такого я уже дошел, но так и не могу получить Id.

Вот так сейчас ответ на странице выводит:
HTML5
1
2
{"result":{"Ads":[{"Id":2187483,"CampaignId":222277,"AdGroupId":2477385},{"Id":2187484,"AdGroupId":2477386,"CampaignId":222277},{"CampaignId":222277,"AdGroupId":2477387,"Id":2187485},{"Id":2187486,"AdGroupId":2477388,"CampaignId":222277},{"CampaignId":222277,"AdGroupId":2477389,"Id":2187487},{"Id":2187695,"AdGroupId":2477388,"CampaignId":222277}]}}
Че не так Че не так
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
24.06.2017, 22:14 6
Лучший ответ Сообщение было отмечено vino0s как решение

Решение

PHP
1
2
3
4
5
6
<?php
$json = json_decode($server_output, TRUE);
var_dump($json);
foreach ($json['result']['Ads'] as $a) echo $a['Id'].'<br>';
curl_close ($ch);
?>
1
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
25.06.2017, 08:58  [ТС] 7
Спасибо) Всё получилось!

а есть инфа отличие обращения -> и как к массиву [ ] ?

PHP
1
2
3
4
5
if (isset($json["result"]["Ads"])) {
    echo "Все в норме";
} else if isset($json["result"]["Warnings"]) {
    echo "Ошибка";
}
Как такую проверочку сотворить, мол может прийти Ads или Warning (или Error)?
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
25.06.2017, 10:04 8
PHP
1
2
if (is_array($m)) echo $m['id'];
if (is_object($m)) echo $m->id;
PHP
1
2
3
4
5
if (isset($json["result"]["Warnings"])) {
    echo "Ошибка";
} else {
    echo "Все в норме";
}
1
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
25.06.2017, 10:29  [ТС] 9
Такой не внимательный... Скобками не обрамил второе условие)
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
25.06.2017, 10:51 10
Програмистами в основном слабоумные работают, так что это нормально, просто включать надо показ ошибок
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
25.06.2017, 12:45  [ТС] 11
Цитата Сообщение от plohoyav Посмотреть сообщение
if (isset($json["result"]["Warnings"])) {
* * echo "Ошибка";
} else {
* * echo "Все в норме";
}
Этот код переписал:
PHP
1
2
3
4
5
if (isset($json["result"]["Ads"])) {
    echo "Все в норме";
} else {
    echo "Ошибка";
}
Ну и по сути я хотел увидеть Всё в норме, а пришла Ошибка.

Добавлено через 13 минут
Цитата Сообщение от vino0s Посмотреть сообщение
Ну и по сути я хотел увидеть Всё в норме, а пришла Ошибка.
Видимо файл на сервере не обновился, всё в норме))
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
25.06.2017, 12:45 12
Но это зависит, будут ли Ads и Warnings одновременно
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
25.06.2017, 14:15  [ТС] 13
Цитата Сообщение от plohoyav Посмотреть сообщение
Но это зависит, будут ли Ads и Warnings одновременно
ну это я если что подправлю, как в начале хотел, с множественным условием, ну короче там придумается, главное чтоб алгоритм был рабочий)
0
25.06.2017, 14:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2017, 14:15
Помогаю со студенческими работами здесь

Отправка запроса на сервер, без ответа
При нажатии на ссылку нужно отправить запрос на сервер, но мне не нужно получать ответ (т.е. мне не...

Отправка POST запроса и получение ответа
Здравствуйте! Я новичок в java, мне дали задание распарсерить данные (формат json) и отправить их...

Отправка POST запроса в ВК и получение ответа
Пытаюсь загрузить аватар в группу ВК. И при отправке post запроса с изображением, в ответ приходит...

Отправка запроса на сервер, и получение ответа
Нужно сделать запрос на сайт, &quot;http://....... .php и что бы он в ответ выдал Фамилию и пароль....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru