Предупреждение при получении метаданных с удаленной веб-страницы - PullRequest
0 голосов
/ 19 апреля 2011

Я получаю эти две ошибки при получении метаданных с удаленной веб-страницы. Это проблема побега или, может быть, проблема cURL?

Warning: get_meta_tags(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://...@import url( "http://www.zymic.com/forum/style_images/v6/folder_editor_images/css_rte.css" ); </style> </head> <body> <div id="ipbwrapper"> <!--ipb.javascript.start--> <script type="text/javascript"> //<![CDATA[ var ipb_var_st = "0"; var ipb_lang_tpl_q1 = "Please enter a page number to jump to between 1 and"; var ipb_var_s = "f2e0d2b492f248ec27ef34ae291a1db4"; var ipb_var_phpext = "php"; var ipb_var_base_url = "http://www.zymic.com/forum/index.php?s=f2e0d2b492f248ec27ef34ae291a1db4&"; var ipb_var_image_url = "style_images/v6"; var ipb_input_f = "34"; var ipb_input_t = "5188"; var ipb_input_p = ""; var ipb_var_cookieid
= ""; var ipb_var_cookie_ in public_html/list/main/output.php on line 22 retrieve pagetitle Warning: file_get_contents(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://...@import url( "http://www.zymic.com/forum/style_images/v6/folder_editor_images/css_rte.css" ); </style> </head> <body> <div id="ipbwrapper"> <!--ipb.javascript.start--> <script type="text/javascript"> //<![CDATA[ var ipb_var_st = "0"; var ipb_lang_tpl_q1 = "Please enter a page number to jump to between 1 and"; var ipb_var_s = "f2e0d2b492f248ec27ef34ae291a1db4"; var ipb_var_phpext = "php"; var ipb_var_base_url = "http://www.zymic.com/forum/index.php?s=f2e0d2b492f248ec27ef34ae291a1db4&"; var ipb_var_image_url = "style_images/v6"; var ipb_input_f = "34"; var ipb_input_t = "5188"; var ipb_input_p = ""; var ipb_var_cookieid
= ""; var ipb_var_coo in /public_html/list/main/output.php on line 27

Вот код:

////Use Curl Library to get page content for security
$url = 'http://en.wikipedia.org/wiki/Category:Lists_of_lists';
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($curl, CURLOPT_USERAGENT, 'ListBot 1.0: Used for compiling a DB of lists across the internet.'); 
$str = curl_exec($curl);  
curl_close($curl);

//get metadata
$tags = get_meta_tags($str);

//Get page title
function get_page_title($str){

    if( !($data = file_get_contents($str)) ) return false;

    if( preg_match("#<title>(.+)<\/title>#iU", $data, $t))  {
        return trim($t[1]);
    } else {
        return false;
    }
}


        ///////////
        echo('retrieve pagetitle');


$tags['title'] = get_page_title($str);

1 Ответ

1 голос
/ 19 апреля 2011

get_meta_tags ожидает местоположение файла (обычно это URL).

Вы можете запросить URL-адрес напрямую и проанализировать заголовки, но вы, вероятно, получите лучшие результаты, выполнив сопоставление с регулярным выражением для строки, которую вы получили с помощьюcurl.

У вас есть хороший код, который захватывает заголовок.Просто измените это, чтобы захватить все метатеги.

На странице php.net, описывающей "get_meta_tags ()" jstel в 126 точках com, внес этот приятный вызов функции:

preg_match_all ("/] + (http-экв | имя) = \ "([^ \"] ) \ "[^>]"."+ content = \" ([^ \ "] ) \" [^>] *> / i ", $ v, $ split_content [], PREG_PATTERN_ORDER);

Что будетпоиск строки $ v для метаданных и дампа совпадений в $ split_content. В своем примере он делает несколько циклов, которые кажутся ненужными, но я бы посоветовал взглянуть на его код и посмотреть, сможете ли вы его адаптировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...