/ php

Первый парсер. Что такое curl_setopt?

Сразу, в лоб, начну с кода:

$url = 'http://spaces.ru';
$ci = curl_init($url);
curl_setopt($ci, CURLOPT_RETUNRTRANSFER, 1);
$reponse = curl_exec($ci);

Здесь показано, как делать запрос с помощью CURL. Впервые увидив такой синтаксис, у меня, ничего, кроме страха, и недоумения не возникало. Что за curl_setopt? Что за CURLOPT_RETUNRTRANSFER? WTF?
Однако, такому синтаксису есть логическое обяснение, особенно, учитывая, что это процедурный код.

Сейчас я немного уйду от описания технических подробностей, и постараюсь привести логичное пример на "котах и собаках".
Вот, если представить, что CURL - это кусок теста, то, будь мы поваром, имели бы возможность выбирать начинку, тип теста, могли бы лепить любую форму, которую пожелаем.

Итак, мы берем обычное тесто curl_init(), и добавляем туда нужные ингридиенты с помощью curl_setopt(наше тесто, имя начинки, её количество). И так, постепенно, добавляя начинки, мы подойдём к этапу готовности к запеканию curl_exec(наше тесто). В итоге, получим результат.

У меня много времени ушло на, чтобы понять, как работает curl_setopt(), и что это за магические аргументы curl_setopt($ch, CURLOPT_USERAGENT, 'My first parser');. Однако, присмотревшись внимательнее, можно увидеть:

  • первым аргументом передаётся дескриптор curl_init(), в который мы пропихиваем нами настройки (начиняем параметрами)
  • вторым является опция, которую изменяем. В даном случае, это системная CURL-константа, которая является обычным числом. То есть, оказывается, что опции можно задавать числом, однако, я этого не рекомендую, ведь, в нашем случае, читабельнось важнее краткости кода. Все доступные опции можно подсмотреть по ссылку http://php.net/manual/ru/function.curl-setopt.php
  • третий аргумент это значение указанной опции.

Резюмирую

Для создания инициализации CURL используется функция curl_init().
Для установки опций curl_setopt($descriptor, $key, $value)
Эти две записи являются тождественными:

curl_setopt($ch, CURLOPT_USERAGENT, 'My first parser');
curl_setopt($ch, 10018, 'My first parser'); //этот вариант записи не рекомендуется

К концу прочтения этой статьи, вы уже должны понимать, как написать свой первый парсер. Этих знаний, в сумме с основами работы парсеров будет достаточно, чтобы написать простой парсер.

Для большего понимания напасания парсеров, рекоменлую прочитать статью:
Которая на примера парсера картинок покажет, как писать парсеры с помощью встроенной функции file_get_contents. Особенно полезным это придётся в случае невозможности применения curl в вашей ситеме.