К шаблону вывода можно подключить любой php-скрипт, которому будут отправляться POST-данные при парсинге контента. С помощью макроса шаблона вывода PHP_SCRIPT вы можете отправить любой код (или текст) скрипту и получить от него ответ в виде обработанного кода. Также можно добавлять данные в MySQL-базу на сервере.
Обратите внимание на опции макросов PHP_SCRIPT
В опциях можно выбрать библиотеку для отправки запросов, рекомендуется использовать Clever Internet Suite (так как она более продвинутая). Библиотеку INDY в PHP_SCRIPT мы решили оставить. Ее использование отличается в написании параметров макроса. Хелп по использованию макросов PHP_SCRIPT с библиотекой INDY ниже в спойлере.
Данные в скрипт отправляются методом POST. Имена POST-параметров вы указываете сами. Если вы хотите отправить в скрипт несколько параметров, то разделяйте переносом строки, например:
1 2 3 | data=123 title=567 img=777.jpg |
ВАЖНО: Отправляемые МНОГОСТРОЧНЫЕ значения параметров должны браться в [FIELDVALUE]…[/FIELDVALUE]
1 2 | <PHP_SCRIPT=http://site.ru/script.php>data=[FIELDVALUE]<CD_GRAN_1!>[/FIELDVALUE] data2=[FIELDVALUE]<CD_GRAN_2!>[/FIELDVALUE]</PHP_SCRIPT> |
Для отправки JSON данных воспользуйтесь параметром [JSONREQUEST] (в POST данных может быть только один JSONREQUEST)
1 2 3 | <PHP_SCRIPT=https://...[UTF-8]> [JSONREQUEST]{"color1": "Red", "Color2": "Green", "Color3": "Blue"}[/JSONREQUEST] </PHP_SCRIPT> |
Также можно отправлять файлы с локального диска (добавив к началу нужной строки оператор [SUBMITFILE])
1 2 3 | <PHP_SCRIPT=http://site.ru/script.php>data=[FIELDVALUE]<CD_GRAN_1!>[/FIELDVALUE] data2=[FIELDVALUE]<CD_GRAN_2!>[/FIELDVALUE] [SUBMITFILE]file=C:\\File.txt</PHP_SCRIPT> |
В шаблоне вывода может быть сколько угодно много подключенных скриптов.
Простой пример PHP-скрипта, который получит данные из POST-параметра data и вернет их в программу:
1 2 3 | <?php echo $_POST["data"]; ?> |
Для того, чтобы программа приняла текст от скрипта в UTF-8 кодировке, необходимо поместить [UTF-8] в конец ссылки на скрипт:
1 2 | <PHP_SCRIPT=http://site.ru/script.php[UTF-8]>data=[FIELDVALUE]<CD_GRAN_1!>[/FIELDVALUE] data2=[FIELDVALUE]<CD_GRAN_2!>[/FIELDVALUE]</PHP_SCRIPT> |
Для того, чтобы программа автоматически расшифровала JSON кодировку полученного текста, добавьте параметр [JSON_DECODE] в конец ссылки на скрипт:
1 2 | <PHP_SCRIPT=http://site.ru/script.php[UTF-8][JSON_DECODE]>data=[FIELDVALUE]<CD_GRAN_1!>[/FIELDVALUE] data2=[FIELDVALUE]<CD_GRAN_2!>[/FIELDVALUE]</PHP_SCRIPT> |
Как передать HTTP-заголовки в PHP_SCRIPT (по умолчанию они берутся из поля custom headers в ctrl+h)
HTTP-заголовки указываются в параметре <HEADERS>:
1 2 3 4 5 6 | <PHP_SCRIPT=http://site.ru/script.php[UTF-8]> <HEADERS>Accept-Encoding: UTFX Accept: HTML</HEADERS> data=[FIELDVALUE]<CD_GRAN_1!>[/FIELDVALUE] data2=[FIELDVALUE]<CD_GRAN_2!>[/FIELDVALUE] </PHP_SCRIPT> |
Как применять функцию поиск-замены к результатам работы макроса PHP_SCRIPT
Для применения функции поиск-замены к полученным данным используйте параметр <REPLACE>:
1 2 3 4 5 6 7 | <PHP_SCRIPT=http://site.ru/script.php[UTF-8]> <HEADERS>Accept-Encoding: UTFX Accept: HTML</HEADERS> <REPLACE>правила поиск-замены</REPLACE> data=[FIELDVALUE]<CD_GRAN_1!>[/FIELDVALUE] data2=[FIELDVALUE]<CD_GRAN_2!>[/FIELDVALUE] </PHP_SCRIPT> |
Как производить повторный запрос к скрипту, если ответ вернул или не вернул указанную подстроку
Сначала установите нужное количество попыток запросов в окне настроек макросов PHP_SCRIPT.
Затем добавьте внутрь макроса PHP_SCRIPT параметр CHECKENTRY
1 2 3 4 5 | <PHP_SCRIPT=http://site.ru/script.php[UTF-8]> ... <CHECKENTRY>Подстрока</CHECKENTRY> ... </PHP_SCRIPT> |
В случае, если ответ на запрос НЕ будет содержать в себе вхождение “Подстрока”, то будет произведен повторный вызов PHP_SCRIPT. Повторный вызов PHP_SCRIPT будет производиться до тех пор, пока не удовлетворится условие, указанное в параметре CHECKENTRY, либо не будет превышено указанное в настройках количество попыток запросов.
Если нужно делать повторный вызов PHP_SCRIPT, когда в ответе содержится указанное вхождение, то добавьте в параметр CHECKENTRY оператор {IFNOT}
1 2 3 4 5 | <PHP_SCRIPT=http://site.ru/script.php[UTF-8]> ... <CHECKENTRY>{IFNOT}Подстрока</CHECKENTRY> ... </PHP_SCRIPT> |
Примечание 1: В дереве макросов шаблона вывода (ctrl+2) вы можете найти множество PHP_SCRIPT: PHP_SCRIPT_0, PHP_SCRIPT, PHP_SCRIPT_2, PHP_SCRIPT_3, PHP_SCRIPT_4, PHP_SCRIPT_5. Все они работают одинаково, только выполняются в разное время (в определенном порядке). Зная это вы можете вызывать, например, макрос PHP_SCRIPT внутри макроса PHP_SCRIPT_2 (так как сначала выполнится PHP_SCRIPT, и только потом PHP_SCRIPT_2).
Примечание 2: Если вы используете PHP_SCRIPT для импорта данных в базу MySQL, не забывайте экранировать спец символы в отправленных данных функцией mysql_real_escape_string (http://sbfactory.ru/cd/?p=419):
1 2 3 4 5 | <?php ... $_POST[id] = mysql_real_escape_string($_POST[id]); #экранируем специальные символы в полученных от Content Downloader POST-данных id ... ?> |
ВАЖНО: При отправке запросов к https://localhost… или http://localhost… прокси подставляться не будут!
Примечание 3: Если при работе макроса вы получаете ошибку запроса типа:
1 2 3 | HTTP/1.1 400 Bad Request или The unknown error was occured: 80090326 |
Попробуйте поставить другие настройки HTTPS для библиотеки Clever Internet Suite (она используется для отправки POST-запросов в макросах <PHP_SCRIPT>
Также учтите, что для загрузки данных на некоторых сайтах требуется ввести HTTP-заголовки запроса. Как это сделать написано выше. Для получения нужных HTTP-заголовков можно воспользоваться монитором сети в браузере Firefox (shift+ctrl+e).
Connect, read timeout, user agent, и custom headers для макросов PHP_SCRIPT берутся из окна настроек HTTP-запросов программы (ctrl+h). Учтите, что сменить user agent (и другие HTTP-заголовки) для макросов PHP_SCRIPT можно с помощью параметра <HEADERS> (читайте про <HEADERS> выше). Например, для отмены применения custom headers из окна ctrl+h достаточно указать пустой или заполненный параметр <HEADERS>, а для смены user agent нужно просто указать в параметре <HEADERS> строчку с новым user agent.
Немного не понятно (я далек от программирования :(). Нельзя ли привести конкретный пример конкретного скрипта. Что-нибудь самое простое, например, сделать, чтобы из урла страницы остался только домен.
В шаблоне, насколько я понимаю, это будет выглядеть так:
data=
Сам скрипт выглядит так, вроде:
Дописал в конец поста пример скрипта (данный скрипт конвертирует отправленный код из url кодировки в “нормальную”).
Спасибо, становится понятней. Если ссылку ставить на скрипт на Денвере (вообще локальном сервере) будет работать?
С локального не пробовал. Попробуйте, отпишитесь 😉
У мну, что с локального сервера ничего не получается, что с нормального. Пойду курить маны по пхп.
Вы мой скрипт пробовали подключить?
Все работает… Спасибо автору за работу.
Может и подключаются очень просто, но для меня, не знакомого с php, это совсем не “очень просто”. У меня есть предложение: сделать страницу с скриптами, на которую любой мог бы опубликовать свои скрипты. А остальные могли бы найти нужный. Я например, нуждаюсь в скрипте обрезания n кол. знаков от начала парсинга границы. Может кто подскажет? Здесь нашел что то по теме, но надо как то переделать что бы не пробелы удирал скрипт, а знаки. http://www.e-inform.ru/php_str_obrez.php
тоже нужно обрезать каждое слова до первой буквы
Для этого есть макрос шаблона вывода [COPY]
А как боретесь с кодировкой? У меня вся информация по пхп скриптам в кракозякбрах выводиться в csv файле.
Обратите внимание на параметр [UTF-8]
у меня тоже проблема с кодировкой при переводе статей. Скрипт сам по себе, отдаёт переведённый текст, в нормальной кодировке, а после подключения к CD получаются краказябры 🙁
Используйте в скрипте параметр [UTF-8] =)
Да уж, помню времена, когда файлик с 10 строками кода ПХП был для меня программой, и я не знал что есть что:)
Вообщем так, ребята. Кому нужна помощь по ПХП – обращайтесь, помогу за определенную плату.
627-641-940 – це асько, пишите.
Если интересует, предоставлю в аренду свой хостинг с размещением на нем Ваших скриптов.
Поделитесь рабочим скриптом переводчика – отблагодарю!!!
Клевая вещь! Очень помогает при парсинге! Разработчику спасибо за нее!
PHP_SCRIPT не поддерживает работу через прокси, можно добавить такую поддержку? Для примера, на mosgid.ru загрузка телефонов имеет лимит для одного адреса, поэтому нужно через прокси заходить. Сами страницы загружаются через прокси, а телефоны нет.
Постараюсь сделать на следующей недели. Обещать не буду.
Спасибо!
Content Downloader X версии 10.88 (19.04.2014):
Обновление по просьбе клиента
– Макросы шаблона вывода PHP_SCRIPT теперь поддерживают прокси (не SOCKS, при условии выбранной библиотеки INDY в ctrl+h);
– Добавлены кнопки вызова редактора поиск-замены для фильтров ссылок и для списков ссылок сканера сайтов;
– Несколько других доработок.
А можно ли выключить вот эту замечательную фичу как-нибудь? Мой php, почему-то, не обрабатывает запросы через прокси, а включается прокси лишь глобально.
Ну, или можно коротенький совет по устранению досадного недостатка моего php – что проще.
Продублирую на форум.
Content Downloader X версии 10.9950 (04.07.2014):
Обновление по просьбе клиента
– Теперь можно отдельно включать (ctrl+r) использование прокси для макросов шаблона вывода PHP_SCRIPT и GETMORECONTENT.
[DATAENCODE] в актуальной версии не работает, программа так и отправляет это на скрипт
Не верю.
Вышлите, пожалуйста, файл проекта на sbfroot@gmail.com
немного не понятно про скрипт-переводчик с англ на рус. скрипт надо установить у себя на серваке и уже постом отправлять данные из CD?
Здравствуйте.
Да, отправлять оригинальный текст и получать от него переведенный текст http://sbfactory.ru/cd/?p=1923