Редактор темы

Реклама
Реклама

Написал код и прокомментировал каждый шаг [поиск в google по api]

  • Автор темы Автор темы iCooLER
  • Дата начала Дата начала

iCooLER

Кодер
Регистрация
13 Сен 2016
Сообщения
390
Рейтинг реакций
239
Баллы
43
Возраст
31
1/3
Автор темы
Добрый вечер!

Часто что-то подсказываю пользователю igrovik что-то по PHP. Сам-то я самоучка от и до, ни одной книжки по веб-разработке не читал, курсов не проходил и тем более меня никто не учил. Получился я, пока еще, не слишком опытный кодер, но все-таки за эти полгода-год я продвинулся вперед. Так вот — на днях написал он мне с вопросом о том, как сделать поисковой запрос к api google(он просто дал ссылку, и насколько я понимаю это поиск в google через их api).

Потратил 15-20 минут и написал вот такой кусок кода, ну и прокомментировал каждое действие. Возможно кому-то будет это интересно(тем кто пытается что-то в этом понять), а у кого-то будет рвать п*кан из-за моей не грамотности в php разработке, за мои ошибки или неверное понимание каких-то функций.

Вот сам код
PHP:
<?php

# заголовок ответа сервера, который говорит что страница в кодировке utf-8
header ("Content-Type: text/html; charset=utf-8");

# функция которая делает запрос по переданному url и возвращает результат
function googleSearch( $q ) {
    # создаем объект запроса
    $page = curl_init();  

    # результат нужно вернуть в переменную(1), а НЕ вывести на страницу(0)
    curl_setopt($page, CURLOPT_RETURNTRANSFER, 1);

    # задаем url запроса, в который сразу подставляем фразу поиска
    # urlencode() делаем, чтобы русские буквы, пробелы и спец-символы в url не создали проблем
    curl_setopt($page, CURLOPT_URL, 'https://www.googleapis.com/customsearch/v1element?key=AIzaSyCVAXiUzRYsML1Pv6RwSG1gunmMikTzQqY&rsz=filtered_cse&num=20&hl=ru&prettyPrint=false&source=gcsc&gss=.ua&sig=4368fa9a9824ad4f837cbd399d21811d&cx=partner-pub-2114605467104271:6649524146&q=' . urlencode( $q ) . '&cse_tok=AOdTmaBXji3_n8zH89iy-VgmLBGPcLqfiA:1514486096740&gl=ua&googlehost=www.google.com&callback=google.search.Search.apiary9495&nocache=1514486102371');
   
    # запрос идет на https:// поэтому отключаем проверку SSL сертификата
    curl_setopt($page, CURLOPT_SSL_VERIFYPEER, FALSE);

    # влючаем авторедирект, если сервер отдаст заголовок Location: [тут_ссылка]
    curl_setopt($page, CURLOPT_FOLLOWLOCATION, 1);

    # отключаем возврат заголовков ответа
    # в большинстве случаев нам не нужна никакая информация из этих заголовков
    curl_setopt($page, CURLOPT_HEADER, 0);

    # устанавливаем заголовки запроса, чтобы хоть как-то имитировать типа это браузер
    curl_setopt($page, CURLOPT_HTTPHEADER, array(
        'accept:*/*',
        'accept-language:ru,en;q=0.8',
        # страница, с которой якобы идет запрос
        'referer:http://search.meta.ua/search.asp?q=' . urlencode( $q ) . '&m=',
        # версия нашего воображаемого браузера
        'user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
    ));

    # делаем запрос (ответ сервера будет в переменной $data);
    $data = curl_exec($page);

    # закрываем соединение (удаляем объект запроса, ведь мы уже получили что нужно)
    curl_close($page);

    # проверяем, вдруг ответ ложь(false) или просто пустой
    if ( $data === false || $data == "" ) return false;

    # результат обернут в google.search.Search.apiary9495([тут_результат]);
    # эту обертку надо убрать вот такой регуляркой
    $data = preg_replace( '#^.*google.search.Search.apiary9495\((.*)\);$#is', '\\1', $data );

    # декодируем результат (результат возвращается в формате json)
    $json = json_decode( $data, true ); // true нужно чтобы на выходе был массив, а НЕ json Object

    # проверяем, вдруг что-то пошло не так
    if ( $json === false ) return false;

    # если все гуд, то возвращаем результат
    return $json;
}

# делаем запрос и получаем результа в перменную $data
# такая конструкция экономит лишнюю строку
# результат работы функции googleSearch() возвращается в переменную $search
# но если результат будет ложь (false) то условие не сработает(вернее сработает else)
# batjax avengers — это фраза для по которой будет идти поиск
if( $search = googleSearch( 'batjax avengers' ) ) {
    # вывод на экран
    echo "<pre>";
    print_r( $search );
} else {
    echo 'Результат ответа пустой';
}
 
Добрый вечер!

Часто что-то подсказываю пользователю igrovik что-то по PHP. Сам-то я самоучка от и до, ни одной книжки по веб-разработке не читал, курсов не проходил и тем более меня никто не учил. Получился я, пока еще, не слишком опытный кодер, но все-таки за эти полгода-год я продвинулся вперед. Так вот — на днях написал он мне с вопросом о том, как сделать поисковой запрос к api google(он просто дал ссылку, и насколько я понимаю это поиск в google через их api).

Потратил 15-20 минут и написал вот такой кусок кода, ну и прокомментировал каждое действие. Возможно кому-то будет это интересно(тем кто пытается что-то в этом понять), а у кого-то будет рвать п*кан из-за моей не грамотности в php разработке, за мои ошибки или неверное понимание каких-то функций.

Вот сам код
PHP:
<?php

# заголовок ответа сервера, который говорит что страница в кодировке utf-8
header ("Content-Type: text/html; charset=utf-8");

# функция которая делает запрос по переданному url и возвращает результат
function googleSearch( $q ) {
    # создаем объект запроса
    $page = curl_init(); 

    # результат нужно вернуть в переменную(1), а НЕ вывести на страницу(0)
    curl_setopt($page, CURLOPT_RETURNTRANSFER, 1);

    # задаем url запроса, в который сразу подставляем фразу поиска
    # urlencode() делаем, чтобы русские буквы, пробелы и спец-символы в url не создали проблем
    curl_setopt($page, CURLOPT_URL, 'https://www.googleapis.com/customsearch/v1element?key=AIzaSyCVAXiUzRYsML1Pv6RwSG1gunmMikTzQqY&rsz=filtered_cse&num=20&hl=ru&prettyPrint=false&source=gcsc&gss=.ua&sig=4368fa9a9824ad4f837cbd399d21811d&cx=partner-pub-2114605467104271:6649524146&q=' . urlencode( $q ) . '&cse_tok=AOdTmaBXji3_n8zH89iy-VgmLBGPcLqfiA:1514486096740&gl=ua&googlehost=www.google.com&callback=google.search.Search.apiary9495&nocache=1514486102371');
  
    # запрос идет на https:// поэтому отключаем проверку SSL сертификата
    curl_setopt($page, CURLOPT_SSL_VERIFYPEER, FALSE);

    # влючаем авторедирект, если сервер отдаст заголовок Location: [тут_ссылка]
    curl_setopt($page, CURLOPT_FOLLOWLOCATION, 1);

    # отключаем возврат заголовков ответа
    # в большинстве случаев нам не нужна никакая информация из этих заголовков
    curl_setopt($page, CURLOPT_HEADER, 0);

    # устанавливаем заголовки запроса, чтобы хоть как-то имитировать типа это браузер
    curl_setopt($page, CURLOPT_HTTPHEADER, array(
        'accept:*/*',
        'accept-language:ru,en;q=0.8',
        # страница, с которой якобы идет запрос
        'referer:http://search.meta.ua/search.asp?q=' . urlencode( $q ) . '&m=',
        # версия нашего воображаемого браузера
        'user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
    ));

    # делаем запрос (ответ сервера будет в переменной $data);
    $data = curl_exec($page);

    # закрываем соединение (удаляем объект запроса, ведь мы уже получили что нужно)
    curl_close($page);

    # проверяем, вдруг ответ ложь(false) или просто пустой
    if ( $data === false || $data == "" ) return false;

    # результат обернут в google.search.Search.apiary9495([тут_результат]);
    # эту обертку надо убрать вот такой регуляркой
    $data = preg_replace( '#^.*google.search.Search.apiary9495\((.*)\);$#is', '\\1', $data );

    # декодируем результат (результат возвращается в формате json)
    $json = json_decode( $data, true ); // true нужно чтобы на выходе был массив, а НЕ json Object

    # проверяем, вдруг что-то пошло не так
    if ( $json === false ) return false;

    # если все гуд, то возвращаем результат
    return $json;
}

# делаем запрос и получаем результа в перменную $data
# такая конструкция экономит лишнюю строку
# результат работы функции googleSearch() возвращается в переменную $search
# но если результат будет ложь (false) то условие не сработает(вернее сработает else)
# batjax avengers — это фраза для по которой будет идти поиск
if( $search = googleSearch( 'batjax avengers' ) ) {
    # вывод на экран
    echo "<pre>";
    print_r( $search );
} else {
    echo 'Результат ответа пустой';
}
Как всегда выручил 🙂
 

Похожие темы Последние темы Популярные темы

Назад
Сверху