Сверстанный сайт под 3 разрешения: Просьба указывать цену.
Переделать скрипт с Direct API 4 на API5
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.
Необходимо переделать скрипт с Яндекс API 4 на новый Яндекс API 5. Без переделки основного функционала.
Сам скрипт:
session_start();
set_time_limit(60);
# Путь к файлу YML
$xml_file = 'http://****.ru/ymllist.xml';
# Логин в Директе
$login = '*****';
$domain = '*****.ru';
$client_id = '******'; #app id
$client_secret = '******'; #app password
$ignoreCampaignList = array('10571956');
//---
/*
GetCampaignsList (без ограничений.)
GetBanners (до 2000 объявлений или до 10 кампаний в одном запросе.)
StopBanners и ResumeBanners (до 2000 идентификаторов объявлений.)
CreateOrUpdateBanners (1000 вызовов на кампанию.)
*/
function utf8($struct)
{
# перекодировка строковых данных в UTF-8
foreach ($struct as $key => $value) {
if (is_array($value)) {
$struct[$key] = utf8($value);
}
elseif (is_string($value)) {
$struct[$key] = utf8_encode($value);
}
}
return $struct;
}
function getData($method, $params)
{
# формирование запроса
$request = array(
'token'=> $_SESSION['access_token'],
'method'=> $method,
'param'=> utf8($params),
'locale'=> 'ru',
);
# преобразование в JSON-формат
$request = json_encode($request);
# параметры запроса
$opts = array(
'http'=>array(
'method'=>"POST",
'content'=>$request,
)
);
# создание контекста потока
$context = stream_context_create($opts);
# отправляем запрос и получаем ответ от сервера
$result = file_get_contents('https://api.direct.yandex.ru/live/v4/json/', 0, $context);
$result = json_decode($result);
if( !empty($result->error_str) ){
if( $result->error_code == '53' ){
resetToken();
}
die($result->error_str.' (code '.$result->error_code.')');
}
return $result;
}
function clearUrl($url)
{
$url = trim($url);
$urlInfo = parse_url($url);
$url = str_replace('?'.$urlInfo["query"], '', $url);
$url = str_replace('www.', '', $url);
$url = str_replace('https://', 'http://', $url);
return $url;
}
function setPrice($newPrice, $str)
{
$str = preg_replace('@ ([0-9]+( ?[0-9]+)*)(\s*)руб@', ' '.$newPrice."$3руб", $str);
return $str;
}
function getPrice($str)
{
preg_match('@ ([0-9]+( ?[0-9]+)*)\s*руб@', $str, $reg);
return str_replace(' ', '', $reg[1]);
}
function resetToken()
{
unset($_SESSION['access_token']);
header('Location: '.basename(__FILE__));
exit;
}
# ============================================================
if( empty($_SESSION['access_token']) ){
if( !isset($_GET['code']) ){
header('Location: https://oauth.yandex.ru/authorize?response_type=code&client_id='.$client_id);
exit;
}else{
$query = array(
'grant_type' => 'authorization_code',
'code' => $_GET['code'],
'client_id' => $client_id,
'client_secret' => $client_secret
);
$query = http_build_query($query);
$header = "Content-type: application/x-www-form-urlencoded";
$opts = array('http' =>
array(
'method' => 'POST',
'header' => $header,
'content' => $query
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://oauth.yandex.ru/token', false, $context);
$result = json_decode($result);
$_SESSION['access_token'] = strval($result->access_token);
}
}
# ============================================================
$xml = simplexml_load_file($xml_file);
$products = array();
$duplicateProducts = array();
foreach($xml->shop->offers->offer as $data){
$url = clearUrl($data->url);
if( isset($products[$url]) && $products[$url]->price.'' != $data->price.'' ){
$duplicateProducts[$url] = true;
}
$products[$url] = $data;
}
# ============================================================
$campaigns = getData('GetCampaignsList', array($login));
$campaignInfo = array();
$CampaignIDS = array();
foreach($campaigns->data as $data){
$campaignInfo[$data->CampaignID.''] = $data;
if( in_array($data->CampaignID.'', $ignoreCampaignList) ) continue;
array_push($CampaignIDS, $data->CampaignID);
}
# ============================================================
$bannersFilter = array(
//'StatusBannerModerate' => array('Yes'), #Результат модерации объявления (проверяется текст и ссылка)
//'StatusPhrasesModerate' => array('Yes'), #Результат модерации фраз
//'StatusPhoneModerate' => array('Yes'), #Результат модерации визитки
//'StatusActivating' => array('Yes'), #Все внесенные изменения вступили в силу — Yes/Pending
//'StatusShow' => array('Yes'), #Показ объявления включен — Yes/No
//'IsActive' => array('Yes'), #Под активностью понимается состояние объявлений,
#при котором показ включается и выключается автоматически
'StatusArchive' => array('No') #Состояние архивации объявления
);
$banners = getData('GetBanners', array(
'CampaignIDS' => $CampaignIDS,
'Filter' => $bannersFilter,
'GetPhrases' => 'No'
));
# ============================================================
$changeLog = array();
$stopBannerIds = array();
$resumeBannerIds = array();
$updateBanners = array();
$bannerInfo = array();
foreach($banners->data as $data){
$url = clearUrl($data->Href);
$url_and_id = $url.'_=_'.$data->BannerID;
if( !strstr($url, $domain) || !strstr($url, '/products/') ) continue;
$bannerInfo[$url_and_id] = $data;
$titlePrice = getPrice($data->Title);
$textPrice = getPrice($data->Text);
$changeLog[$url_and_id] = array();
if( isset($products[$url]) ){
$priceChanged = false;
if( !empty($titlePrice) && $titlePrice != $products[$url]->price ){
array_push($changeLog[$url_and_id], 'Изменен заголовок:
С:: «'.
$data->Title.'»
На: «'.setPrice($products[$url]->price, $data->Title).'»');
$priceChanged = true;
}
if( !empty($textPrice) && $textPrice != $products[$url]->price ){
array_push($changeLog[$url_and_id], 'Изменен текст:
С:: «'.
$data->Text.'»
На: «'.setPrice($products[$url]->price, $data->Text).'»');
$priceChanged = true;
}
if( $priceChanged && isset($_POST["banner_".$data->BannerID]) ){
$saveData = array(
'BannerID' => $data->BannerID,
'CampaignID'=>$data->CampaignID,
'AdGroupID'=>$data->AdGroupID,
'Title' => setPrice($products[$url]->price, $data->Title),
'Text' => setPrice($products[$url]->price, $data->Text),
'Href'=>$data->Href,
);
if( is_array($data->Sitelinks) && count($data->Sitelinks) ){
$saveData['Sitelinks'] = array();
foreach($data->Sitelinks as $link){
array_push($saveData['Sitelinks'], array('Title'=>$link->Title, 'Href'=>$link->Href));
}
}
array_push($updateBanners, $saveData);
}
if( $products[$url]["available"] != "true" && $data->StatusShow == "Yes" ){
array_push($changeLog[$url_and_id], 'Изменен статус: выкл.');
if( isset($_POST["banner_".$data->BannerID]) ) array_push($stopBannerIds, $data->BannerID);
}
if( $products[$url]["available"] == "true" && $data->StatusShow != "Yes" ){
array_push($changeLog[$url_and_id], 'Изменен статус: вкл.');
if( isset($_POST["banner_".$data->BannerID]) ) array_push($resumeBannerIds, $data->BannerID);
}
}elseif($data->StatusShow == "Yes"){
array_push($changeLog[$url_and_id], 'Изменен статус: выкл.');
if( isset($_POST["banner_".$data->BannerID]) ) array_push($stopBannerIds, $data->BannerID);
}
continue;
echo "BannerID: {$data->BannerID}
";
echo "StatusShow: {$data->StatusShow}
";
echo "Title: {$data->Title}
";
echo "Text: {$data->Text}
";
echo "Href: {$data->Href}
";
echo "---
";
echo "StatusBannerModerate: {$data->StatusBannerModerate}
";
echo "StatusActivating: {$data->StatusActivating}
";
echo "IsActive: {$data->IsActive}
";
echo "StatusShow: {$data->StatusShow}
";
echo "
";
}
# ============================================================
if( isset($_POST["update_banners"]) ){
if( !empty($stopBannerIds) ){
$update = getData('StopBanners', array(
'BannerIDS' => array_slice($stopBannerIds, 0, 2000)
));
}
if( !empty($resumeBannerIds) ){
$update = getData('ResumeBanners', array(
'BannerIDS' => array_slice($resumeBannerIds, 0, 2000)
));
}
if( !empty($updateBanners) ){
$update = getData('CreateOrUpdateBanners', $updateBanners);
}
}
# ============================================================
$lastCampaignName = '';
$changes = '';
foreach($changeLog as $url_and_id=>$data){
if(empty($data)) continue;
list($url) = explode('_=_', $url_and_id);
$campaignName = $campaignInfo[$bannerInfo[$url_and_id]->CampaignID]->Name;
if( isset($_POST["banner_".$bannerInfo[$url_and_id]->BannerID]) ) continue;
if( $lastCampaignName != $campaignName ){
$changes.= '
Кампания: '.$campaignName.'
';$lastCampaignName = $campaignName;
}
$color = 'black';
if( isset($duplicateProducts[$url]) ) $color = 'red';
$changes.= '
Объявление № '.$bannerInfo[$url_and_id]->BannerID.'
('.(isset($products[$url])? $products[$url]->model : $url).')
- '.implode('
- ', $data).'
';
}
?>
Список изменений
if( !empty($changes) ){
echo '
';echo $changes;
echo ' ';
echo '';
echo '
';}
else
echo 'Нет изменений.';
?>
Заявки фрилансеров
Похожие заказы
- Веб-программирование4 заявкиЗакрыт8 лет назад
Здравствуйте! Необходимо выполнить технический и SEO аудит сайта с подробным описанием ошибок и техническим заданием по их устранению для программиста и seo специалиста. Сайт https://www.biturbo.by
Веб-программирование18 заявокЗакрыт8 лет назадПриветствую. Необходимо полечить сайты от вирусов, сайты лендинги без админок. Насколько это быстро можно сделать? К примеру за час 200 сайтов автоматически можно почистить или нет? И можете ли вы узнать и устранить ...
Веб-программирование3 заявкиЗакрыт8 лет назад- $90
В приложении файлы. Файл с ТЗ - info.docx
Веб-программирование1 исполнительЗавершен8 лет назад - $10
Требуется внедрить скрол фото в галереи. Подробности в ЛС.
Веб-программирование1 заявкаЗакрыт8 лет назад Всем привет. Необходимо написать скрипт кнопки сброса раскрытого фильтра в Друпале.
Веб-программирование2 заявкиЗакрыт8 лет назадВсем привет и всех с новым годом! Нужно немного допилить landing page. После того как пользователь сделает заказ, нужно чтобы появлялось всплывающее окно следующего содержания: "Благодарим за заказ! Ваша заявка принята! Наш ...
Веб-программирование1 исполнительЗавершен8 лет назадК нескольким галереям на различных сайтах нужно приладить такие эффекты, как смена фоток скроллом мыши и свайп на сенсорных экранах
Веб-программирование5 заявокЗакрыт8 лет назадтребуется специалист с отличным знанием вордпресса Необходимо написать ряд кастомных плагинов. Также обязательно хорошо знать спанель, панель веста, необходимо умение настроить впс.
Веб-программирование3 заявкиЗакрыт8 лет назадНаписать программу.
Веб-программирование5 заявокЗакрыт8 лет назад