Бодрого утра,Тостер.
Образовалась проблемка одна с парсингом дополнительных ссылок, которые размещаются под объявлениями, которые отображаются в Яндексе. Основные ссылки нормально забираются и сохраняются, но вот отдел рекламы нашей фирмы решил, что им нужны обязательно еще и дополнительные ссылки, которые под этими объявлениями, сохранять, и вот тут встала проблема.
Выглядит она следующим образом - тот когда системы который достался, абсолютно без документации и до разработчиков тоже нету доступа уже, отказаться и взять что-то другое нельзя,
а копания в коде привели вот к этому куску кода:
public function importYandexDirect($account) {
$login = $account->login;
$appid = $account->application_id;
$token = $account->token;
$stream = $account->fetchStream();
$service = $account->fetchService();
$user = $stream->fetchUser();
$wsdlurl = 'https://soap.direct.yandex.ru/wsdl/v4/';
$client = new SoapClient($wsdlurl, array(
'trace' => 1,
'exceptions' => 1,
)
);
$headers = array();
$headers[] = new SoapHeader($wsdlurl, 'login', $login);
$headers[] = new SoapHeader($wsdlurl, 'application_id', $appid);
$headers[] = new SoapHeader($wsdlurl, 'token', $token);
$headers[] = new SoapHeader($wsdlurl, 'locale', 'ru');
$client->__setSoapHeaders($headers);
if ($account->sub_account) {
$sas = explode(',', $account->sub_account);
} else {
$sas = array('' => '');
}
foreach ($sas as $sa) {
try {
if ($sa) {
$campaigns = $client->GetCampaignsList(array($sa));
} else {
$campaigns = $client->GetCampaignsList();
}
} catch (Exception $e) {
echo "auth: $login failed\n";
return false;
}
$cids = array();
if ($account->campaign_id || $service) {
foreach ($campaigns as $row) {
if ((! $account->campaign_id && $row->IsActive == 'Yes') || $account->campaign_id == $row- >CampaignID) {
$cids[] = $row->CampaignID;
}
}
} else {
foreach ($campaigns as $row) {
$campaign = Wt_Factory::getInstance('Campaigns')->fetchRow(array('remote_id = ?' => $row- >CampaignID, 'user_id = ?' => $user->i$
if ($row->IsActive == 'Yes') {
$cids[] = $row->CampaignID;
}
}
}
$params = array(
'CampaignIDS' => $cids,
'GetPhrases' => 'WithPrices'
);
$adverts = array();
if (! empty($cids)) {
try {
$adverts = $client->GetBanners($params);
} catch (Exception $e) {
"get banners: $login" . $e->getMessage() . "\n";
continue;
}
}
$toUpdate = array();
foreach ($adverts as $row) {
if ($row->StatusArchive == 'Yes') continue;
$campaign = Wt_Factory::getInstance('Campaigns')->fetchRow(array('remote_id = ?' => $row->CampaignID, 'user_id = ?' => $user->id));
if ($service) {
$serviceId = $service->id;
} elseif ($campaign) {
$serviceId = $campaign->fetchService()->id;
} else {
continue;
}
$data = array(
'title' => $row->Title,
'text' => $row->Text,
'external_link' => 'http://' . $row->Href,
'service_id' => $serviceId,
'user_id' => $user->id,
'type' => 'yandex_direct',
'remote_id' => $row->BannerID,
'campaign_id' => $campaign ? $campaign->id : null,
);
$item = $this->fetchRow(array('remote_id = ?' => $row->BannerID));
if ($item) $data['id'] = $item->id;
$id = $this->save($data);
if (strpos($row->Href, 'aid=') === false) {
if (! $item) {
$item = $this->findById($id);
}
if (strpos($row->Href, '?') === false) {
$sep = '?';
} else {
$sep = '&';
}
$url = $row->Href . $sep . "aid={$item->id}&stid={$stream->id}&src={keyword}";
$row->Href = $url;
$item->external_link = 'http://' . $url;
$toUpdate[$row->BannerID] = $row;
$item->save();
}
if (! empty($row->Sitelinks)) {
$changed = false;
foreach ($row->Sitelinks as &$link) {
if (strpos($link->Href, 'aid=') === false) {
if (! $item) {
$item = $this->findById($id);
}
if (strpos($link->Href, '?') === false) {
$sep = '?';
} else {
$sep = '&';
}
$link->Href = $link->Href . $sep . "aid={$item->id}&stid={$stream->id}&src={keyword}";
$changed = true;
}
}
if ($changed) {
$toUpdate[$row->BannerID] = $row;
}
}
}
if (count($toUpdate)) {
try {
$res = $client->CreateOrUpdateBanners($toUpdate);
} catch (Exception $e) {
echo "update: $login " . $e->getMessage() . "\n";
}
}
}
return count($this->errors) ? false : true;
}
public function archive($ids) {
if (! is_array($ids)) {
$ids = array($ids);
}
return $this->update(array('is_hidden' => 't'), array('id IN (?)' => $ids));
}
public function pickArticle($id, $stid) {
$advert = $this->findById($id);
$stream = Wt_Factory::getInstance('Streams')->findById($stid);
$data = array();
$data['title'] = $advert->getTitle();
$data['stream_id'] = $stream->id;
$data['user_id'] = $stream->user_id;
$data['type'] = 'article';
$rotation = array(
array('advert_id' => $advert->id)
);
return Wt_Factory::getInstance('Blocks')->save($data, array(), $rotation);
}
}
Так как я сам кодю больше на C#\C++ вот так вот сразу разобраться с кодом на PHP сложно
(три месяца опыта всего с этим языком), а начальство требует уже завтра к вечеру сдавать задачу, намекая на то что там ничего сложного, а я уже неделю пытаюсь разобраться в написанном предыдущими прогерами, которые внезапно свалили. Как удалось узнать, тут где-то в коде отсекаются как раз именно эти дополнительные ссылки, и вот прошу, может, кто умный в теме подскажет, что подправить. Огромное спасибо всем откликнувшимся.