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

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

23.06.2017, 16:31. Показов 6176. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.06.2017, 16:31
Ответы с готовыми решениями:

Отправка запроса и получения ответа
Здраствуйте помогите написать функцию которая бы посылала запрос на http://ipgeobase.ru:7020/geo?ip= в конце с ip адресом пользователя...

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

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

12
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
24.06.2017, 13:11
Можно попробовать примеры https://tech.yandex.com/direct... s-docpage/
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
24.06.2017, 17:12  [ТС]
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
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
24.06.2017, 21:01
vino0s, ты переменную $REQUEST в json не конвертируешь, а просто передаешь на сервер Array. Используй json_decode
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
24.06.2017, 22:04  [ТС]
Давай тут подробнее, как раз на этом этапе завис:

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
Лучший ответ Сообщение было отмечено 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  [ТС]
Спасибо) Всё получилось!

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

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
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  [ТС]
Такой не внимательный... Скобками не обрамил второе условие)
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
25.06.2017, 10:51
Програмистами в основном слабоумные работают, так что это нормально, просто включать надо показ ошибок
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
25.06.2017, 12:45  [ТС]
Цитата Сообщение от 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
Но это зависит, будут ли Ads и Warnings одновременно
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
25.06.2017, 14:15  [ТС]
Цитата Сообщение от plohoyav Посмотреть сообщение
Но это зависит, будут ли Ads и Warnings одновременно
ну это я если что подправлю, как в начале хотел, с множественным условием, ну короче там придумается, главное чтоб алгоритм был рабочий)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.06.2017, 14:15
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
Реляционная модель и правила Кодда: фундамент современных баз данных
Codd 05.04.2025
Конец 1960-х — начало 1970-х годов был периодом глубоких трансформаций в области хранения и обработки данных. На фоне растущих потребностей бизнеса и правительственных структур существовавшие на тот. . .
Асинхронные операции в Django с Celery
py-thonny 05.04.2025
Разработчики Django часто сталкиваются с проблемой, когда пользователь нажимает кнопку отправки формы и. . . ждёт. Секунды растягиваются в минуты, терпение иссякает, а интерфейс приложения замирает. . . .
Использование кэшей CPU: Максимальная производительность в Go
golander 05.04.2025
Разработчикам хорошо известно, что эффективность кода зависит не только от алгоритмов и структур данных, но и от того, насколько удачно программа взаимодействует с железом. Среди множества факторов,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер