[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: API яндекс директ: Миграция приложения v4 на v5
Napst3r
Доброго времени суток. Имеется скрипт, который работает с рекламными компаниями в яндекс директ. Скрипт был написан сторонним программистом 3 года назад и сейчас связаться с ним не получается, поэтому придется как-то решать задачу своими силами. Суть - скрипт использует методы API 4 версии, отключение которой обещают максимум через месяц. Поэтому нужно переходить на API 5 версии. Самому вроде удалось обновить методы с API 4 до API 4 Live, но там все действия идентичны, а вот с переходом на 5 версию большие проблемы. Сам я в PHP новичок, поэтому очень надеюсь на Вашу помощь. Взаимодействие с яндекс API осуществляется 3 файлами: 1 файл конфигурации, 2 насколько я понимаю обработчик, 3 файл, в котором описаны все функции работы и т.д. Выкладывать код всех 3 файлов смысла не вижу, так как страница будет огромной. Для примера:

API 4 версии использует вот этот файл:
define('YANDEXAPI','https://soap.direct.yandex.ru/json-api/v4/');

в другом файле происходит обработка данного файла:
$opts = array(
'http'=>array(
'method'=>"POST",
'content'=>$j_request,
)
);
$context = stream_context_create($opts);
$result = file_get_contents(YANDEXAPI, 0, $context);
$res = json_decode($result,true);

Если заменить файл API 4 на API 5: вот на такой
define('YANDEXAPI','https://api.direct.yandex.com/json/v5/ads');

То обработчик перестает работать и начинает ругаться на эти строчки

foreach($campains['data'] as $campain){
if(stripos($campain['Name'],CAMPAIN_NAMEMASK)!==false){
$baners = do_yandex_request('GetBanners',array(
'CampaignIDS' => array($campain['CampaignID']),
// 'Filter' => array(
// 'StatusPhoneModerate' => array('Yes'),
// 'StatusBannerModerate' => array('Yes'),
// 'StatusPhrasesModerate' => array('Yes'),
// 'StatusActivating' => array('Yes'),
// 'StatusShow' => array('Yes'),
// 'IsActive' => array('Yes'),
// 'StatusArchive' => array('No')
// ),
'GetPhrases' => 'WithPrices'
),false);

Мол неправильный аргумент foreach($campains['data'] as $campain){

Та же ситуация здесь:

foreach($campains['data'] as $campain){
if(stripos($campain['Name'],CAMPAIN_NAMEMASK)!==false){
$c++;
}


Происходит это скорее всего из-за несоответсвия методов, в API 4 метод GetBanners,
а в API 5 Сервис Campaigns, метод get

Менял GetBanners на get, делу это не помогло. Нужно еще что-то подключать.

Начать, наверное, нужно с решения этих ошибок. При необходимости могу отправить все три файла для детального ознакомления. Заранее благодарен, очень надеюсь на Вашу помощь.
Kusss
нужно смотреть что возвращает API . какой ты получаешь массив
перед
foreach($campains['data'] as $campain){
вывести содержимое массива $campains, Если он вообще имеется
echo '<pre>';
print_r($campains);
echo '</pre>';
die();
Napst3r
Вот так:
https://api.direct.yandex.com/json/v5/ads


Array
(
[success] => 1
[data] =>
)

Со старой версией вот тако получается:
https://soap.direct.yandex.ru/json-api/v4/


[data] => Array
(
[0] => Array
(
[Login] => ***
[StatusShow] => No
[StatusActivating] => Yes
[StatusModerate] => Yes
[Shows] => 8226958
[Sum] => 37667,04
[StartDate] => 2009-10-05
[Rest] => 0
[AgencyName] =>
[Clicks] => 70131
[ManagerName] =>
[SumAvailableForTransfer] => 0
[IsActive] => No
[StatusArchive] => Yes
[CampaignID] => 2060227
[Status] => Кампания перенесена в архив
[Name] => Название"
)

[1] => Array


Получается не удается получить массив кампаний? Что делать, что редактировать?
Napst3r
Если я правильно понял, то не работает вот этот элемент, так как не удается получить массив:

$campains = do_yandex_request('GetCampaignsList',array(),false);
$res = array();

GetCampaignsList это метод api 4

В api 5 применяется Сервис Campaigns, метод get. Замена GetCampaignsList на get ничего не дает, нужно еще как то задействовать Сервис Campaigns. Вопрос как?
Kusss
Смотри что ты получаешь от API. Структура и наименование переменных.
Может у тебя обойдется правкой пары переменных, а может все переписывать придется.
$result = file_get_contents(YANDEXAPI, 0, $context);
$res = json_decode($result,true);

тут ты получаешь массив json, и декодируешь его в массив php
вот его и нужно смотреть/сравнивать.


а твоё $campains['data'] - это более "глубокая" величина массива.
Napst3r
Kusss

Судя по документации, там все отличается( Как со всем этим быть не знаю. Голова кругом.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.