- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Я паршу выдачу яндекса через оф. сервис XML лимитов
Делаю запрос, например $name = urlencode("ИНН Фирма");
И получаю 10 массивов.
Далее я начинаю перебирать каждый массив по очереди ища в нем определенный сайт, вот пример
$json = json_encode($array["response"]["results"]["grouping"]["group"][0]);
preg_match('~(\s)(\d{10})([,|.|\s|!|)])~m', $json, $inn);
$url = $array["response"]["results"]["grouping"]["group"][0]["doc"]["url"];
}
elseif (!empty(strpos($array["response"]["results"]["grouping"]["group"][1]["doc"]["url"],'site.ru'))){
$json = json_encode($array["response"]["results"]["grouping"]["group"][1]);
preg_match('~(\s)(\d{10})([,|.|\s|!|)])~m', $json, $inn);
$url = $array["response"]["results"]["grouping"]["group"][1]["doc"]["url"];
}
Все работает, за одним нюансом - если в выдаче сайт site.ru будет несколько раз, а такое бывает часто
то у меня по идее сыграет последний по счету массив, где найдется совпадение, а это неправильно
ибо самый релевантный ответ первый. Ну и я подумал что в каждый if нужно вставить continue;
чтобы как только совпадение найдено, итерация переходила на следующую
Но словил необъяснимую фигную.
Делаю тестовый прогон с лимитом 5 (5 итераций), а в базу пишется одно значение, самое последние
else{
$inn = '0';
$url = 'non';
}
и все цикл заканчивается! Как это объяснить?
Я проверил, цикл спотыкается на первой итерации, а не последнюю в базу пишет.
Вот полный код (попробовал иф вместо елсеиф, тоже самое)
foreach ($result as $item) {
$name = urlencode("ИНН ".$item->name." ".$item->geo_code);
$name = str_replace(' ', '%20', $name);
$links = 'https://yandex.ru/search/xml?user=ltpm&key=****&query='.$name.'&l10n=ru&sortby=rlv&filter=none&groupby=attr%3D%22%22.mode%3Dflat.groups-on-page%3D10.docs-in-group%3D1';
$result = simplexml_load_file($links);
$json = json_encode($result);
$array = json_decode($json, true);
if (!empty(strpos($array["response"]["results"]["grouping"]["group"][0]["doc"]["url"],'site.ru'))){
$json = json_encode($array["response"]["results"]["grouping"]["group"][0]);
preg_match('~(\s)(\d{10})([,|.|\s|!|)])~m', $json, $inn);
$url = $array["response"]["results"]["grouping"]["group"][0]["doc"]["url"];
continue;
}
if (!empty(strpos($array["response"]["results"]["grouping"]["group"][1]["doc"]["url"],'site.ru'))){
$json = json_encode($array["response"]["results"]["grouping"]["group"][1]);
preg_match('~(\s)(\d{10})([,|.|\s|!|)])~m', $json, $inn);
$url = $array["response"]["results"]["grouping"]["group"][1]["doc"]["url"];
continue;
}
if (!empty(strpos($array["response"]["results"]["grouping"]["group"][2]["doc"]["url"],'site.ru'))){
$json = json_encode($array["response"]["results"]["grouping"]["group"][2]);
preg_match('~(\s)(\d{10})([,|.|\s|!|)])~m', $json, $inn);
$url = $array["response"]["results"]["grouping"]["group"][2]["doc"]["url"];
continue;
}
if (!empty(strpos($array["response"]["results"]["grouping"]["group"][3]["doc"]["url"],'site.ru'))){
$json = json_encode($array["response"]["results"]["grouping"]["group"][3]);
preg_match('~(\s)(\d{10})([,|.|\s|!|)])~m', $json, $inn);
$url = $array["response"]["results"]["grouping"]["group"][3]["doc"]["url"];
continue;
}
if (!empty(strpos($array["response"]["results"]["grouping"]["group"][4]["doc"]["url"],'site.ru'))){
$json = json_encode($array["response"]["results"]["grouping"]["group"][4]);
preg_match('~(\s)(\d{10})([,|.|\s|!|)])~m', $json, $inn);
$url = $array["response"]["results"]["grouping"]["group"][4]["doc"]["url"];
continue;
}
if (!empty(strpos($array["response"]["results"]["grouping"]["group"][5]["doc"]["url"],'site.ru'))){
$json = json_encode($array["response"]["results"]["grouping"]["group"][5]);
preg_match('~(\s)(\d{10})([,|.|\s|!|)])~m', $json, $inn);
$url = $array["response"]["results"]["grouping"]["group"][5]["doc"]["url"];
continue;
}
else{
$inn = '111';
$url = 'non';
}
$db->setQuery("запись в базу");
$db->query();
}
}
Так continue отправляет на "новый заход" в начало цикла, а "запись в базу" - в конце, до неё обработка в этом случае просто не доходит.
Блин вот я ступил, реально же, все обрывается на континуме, нужно просто запись в базу в иф поднять. Спасибо реально ступил.
p.s. Я бы вот это вот многоразповторяющееся в цикл бы завернул..
Что-то вроде
Господа, извините сразу что влажу не по делу- хочу выразить искреннее восхищение и сочуствие - как вы это читаете??? Нам, питонистам такое не понять)))
Этот же код на питоне будет примерно в 2 раза короче и читабельнее. особенно с пандой
Я бы даже в пыхе использовал бы отступы все таки - намного проще разбираться.
И напомните - зачем encode/decode обратно?
Господа, извините сразу что влажу не по делу- хочу выразить искреннее восхищение и сочуствие - как вы это читаете??? Нам, питонистам такое не понять)))
Этот же код на питоне будет примерно в 2 раза короче и читабельнее. особенно с пандой
Я бы даже в пыхе использовал бы отступы все таки - намного проще разбираться.
И напомните - зачем encode/decode обратно?
Я всегда код читаемым делать стараюсь, чтобы потом не запутаться 🤪
И напомните - зачем encode/decode обратно?
Видимо что-бы из объекта сделать массив.
Этот же код на питоне будет примерно в 2 раза короче и читабельнее. особенно с пандой
Он и на PHP будет короче раза в 4-5, если не дублировать условие, а вынести в отдельную функцию (метод) и сделать цикл, как выше посоветовали.
если не дублировать условие,
Это понятно, но кроме того в питоне панда раздербанит любой ответ одной строкой как надо
в питоне панда
посмотрел на примеры для этой вашей панды - код не красивее того, что у Dram получается. :)
посмотрел на примеры для этой вашей панды - код не красивее того, что у Dram получается. :)
Это кому как. Панда , драм, кому что удобнее