Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> API яндекс директ: Миграция приложения v4 на v5
Napst3r  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 42366
На форуме: 10 месяцев, 25 дней
Карма:




Доброго времени суток. Имеется скрипт, который работает с рекламными компаниями в яндекс директ. Скрипт был написан сторонним программистом 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, делу это не помогло. Нужно еще что-то подключать.

Начать, наверное, нужно с решения этих ошибок. При необходимости могу отправить все три файла для детального ознакомления. Заранее благодарен, очень надеюсь на Вашу помощь.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 8 дней
Карма: 77




нужно смотреть что возвращает API . какой ты получаешь массив
перед
foreach($campains['data'] as $campain){
вывести содержимое массива $campains, Если он вообще имеется
echo '<pre>';
print_r($campains);
echo '</pre>';
die();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Napst3r  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 42366
На форуме: 10 месяцев, 25 дней
Карма:




Вот так:
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 - 8.07.2016 - 14:56
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Napst3r  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 42366
На форуме: 10 месяцев, 25 дней
Карма:




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

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

GetCampaignsList это метод api 4

В api 5 применяется Сервис Campaigns, метод get. Замена GetCampaignsList на get ничего не дает, нужно еще как то задействовать Сервис Campaigns. Вопрос как?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 8 дней
Карма: 77




Смотри что ты получаешь от API. Структура и наименование переменных.
Может у тебя обойдется правкой пары переменных, а может все переписывать придется.
$result = file_get_contents(YANDEXAPI, 0, $context);
$res = json_decode($result,true);

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


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

Это сообщение отредактировал Kusss - 8.07.2016 - 15:29
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Napst3r  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 42366
На форуме: 10 месяцев, 25 дней
Карма:




Kusss

Судя по документации, там все отличается( Как со всем этим быть не знаю. Голова кругом.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса