Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

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

Тема в разделе "Свободное общение", создана пользователем iCooLER, 28 дек 2017.

28.12.17 в 22:11
29.12.17 в 03:46
1
419
2
  1. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    Добрый вечер!

    Часто что-то подсказываю пользователю 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($pageCURLOPT_RETURNTRANSFER1);

        
    # задаем url запроса, в который сразу подставляем фразу поиска
        # urlencode() делаем, чтобы русские буквы, пробелы и спец-символы в url не создали проблем
        
    curl_setopt($pageCURLOPT_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($pageCURLOPT_SSL_VERIFYPEERFALSE);

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

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

        
    # устанавливаем заголовки запроса, чтобы хоть как-то имитировать типа это браузер
        
    curl_setopt($pageCURLOPT_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$datatrue ); // 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 
    'Результат ответа пустой';
    }
     
    • Нравится Нравится x 2
    • Полезно Полезно x 1
  2. igrovik

    igrovik Местный

    Регистрация:
    11 дек 2016
    Сообщения:
    1.007
    Лучших ответов:
    8
    Рейтинги:
    +354 / 12 / -0
    Как всегда выручил :)
     
Яндекс.Метрика