Ошибка сервера Google Scholar Анализатор HTML

Вплоть до этой недели я мог использовать простой синтаксический анализатор html dom для извлечения контента из Google Scholar. (Да, я знаю, что они не хотят, чтобы люди делали это, поэтому нет API).

Однако в последние день или два он перестал отображать контент. При попытке простого file_get_html или URL возникает ошибка:

Ошибка сервера К сожалению, при обработке вашего запроса произошла внутренняя ошибка сервера. Наши инженеры были уведомлены и работают над решением проблемы. Повторите попытку позже.

Я видел другие вопросов, но решения в основном специфичны для R или используют cURL. Есть ли у кого-нибудь предложения по настройке моей простой функции php, особенно для двойного вызова? Или мне не повезло, так как Google сейчас закрывает эту дверь?

Мой код:

<?php require_once('assets/functions/simple_html_dom.php');
$google_id = get_post_meta($post->ID, 'ecpt_google_id', true);
$google = new simple_html_dom;
$google_url = 'http://scholar.google.com/citations?user=' . $google_id . '&pagesize=10';
$older_pubs = 'http://scholar.google.com/citations?user=' . $google_id;
$google = file_get_html($google_url);

foreach($google->find('tr.gsc_a_tr') as $article) {
    $item['title']  = $article->find('td.gsc_a_t a', 0)->plaintext;
    $item['link']   = $article->find('a.gsc_a_at', 0)->href;
    $item['pub']    = $article->find('td.gsc_a_t .gs_gray', 1)->plaintext;
    $item['year']   = $article->find('td.gsc_a_y', 0)->plaintext;

    ?>
    <p class="pub"><b><a href="http://scholar.google.com<?php echo $item['link'];?>"><?php echo $item['title']; ?></a></b></p>
    <h6 class="pub"><?php echo $item['year']; ?>, <?php echo $item['pub']; ?></h6>


    <?php } ?>
<p align="right"><b><a href="<?php echo $older_pubs; ?>">View Publications</a></b></p>

person timmyg    schedule 18.11.2015    source источник
comment
Вы действительно должны спросить Google ... к сожалению   -  person Jaap    schedule 19.11.2015


Ответы (1)


Ученый Google больше недоступен без принятия файлов cookie. «Ошибка сервера» возникает, если вы пытаетесь получить доступ с помощью curl/wget/...

Попробуйте принять файлы cookie, для curl/php см.: Сервер Google выдает ошибку сервера при первом запросе в режиме приватного просмотра

Затем дважды загрузите страницу (сначала принимается файл cookie и ошибка сервера, а затем вы получаете контент).

person Markus    schedule 19.11.2015
comment
Спасибо! Я использовал фрагмент кода в ответе, и он отлично работает! Однако нет способа заставить пользователя обновить страницу, не так ли? - person timmyg; 19.11.2015
comment
Да, есть. В основном есть два пути. (1) Вы можете загрузить страницу дважды, например: curl_exec($curl); // устанавливает куки $data = curl_exec($curl); // загружает реальные данные или (2): вы можете использовать один файл cookie для всех ваших посетителей. Измените $config['cookie_file'] = $dir . '/печенье/' . md5($_SERVER['REMOTE_ADDR']) . '.текст'; to $config['cookie_file'] = '/tmp/myscholarcookie.txt'; Первое решение может замедлить скорость загрузки вашей страницы, поэтому в этом случае я бы предпочел (2). - person Markus; 20.11.2015
comment
спасибо! это исправило требование обновления. - person timmyg; 23.11.2015