1

URL からメタ タイトルとキーワードを取得しようとしています。

私は最初にURLを取得し、foreachループで実行するphpExcelライブラリを使用して、ExcelシートにURLのリストを持っています。結果を新しい Excel シートに書き込む

私のコードは次のとおりです

<?php
include 'PHPExcel.php';
$objPHPExcel = new PHPExcel();
require_once 'PHPExcel/IOFactory.php';

$readFileName = "script_test.xlsx";
$target_file_path = "results.xlsx";

$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($readFileName);
$objWorksheet = $objPHPExcel->getActiveSheet();

$objPHPExcel1 = PHPExcel_IOFactory::load($target_file_path);

$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();

$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

$i = 2;
for ($row = 1; $row <= $highestRow; ++$row) 
{
    $keyword_val = $objWorksheet->getCellByColumnAndRow(0, $row)->getValue();
    $url_headers_details = get_headers($keyword_val, 1);

    if($url_headers_details[0] = "HTTP/1.1 200 OK")
    {
        $html = file_get_contents_curl($keyword_val);

        //parsing begins here:
        $doc = new DOMDocument();
        @$doc->loadHTML($html);
        $nodes = $doc->getElementsByTagName('title');

        //get and display what you need:
        $title = $nodes->item(0)->nodeValue;

        $metas = $doc->getElementsByTagName('meta');

        for ($i = 0; $i < $metas->length; $i++)
        {
            $meta = $metas->item($i);
            if($meta->getAttribute('name') == 'keywords')
                $keywords = $meta->getAttribute('content');
        }

        $objPHPExcel1->getActiveSheet()->setCellValue('A'.$i, $keyword_val);

        if (!isset($title)) {
            $objPHPExcel1->getActiveSheet()->setCellValue('B'.$i, "NA");
        }
        elseif (isset($title)) {
            $objPHPExcel1->getActiveSheet()->setCellValue('B'.$i, $title);
        }

        if (!isset($keywords)) {
            $objPHPExcel1->getActiveSheet()->setCellValue('C'.$i, "NA");
        }
        elseif (isset($keywords)) {
            $objPHPExcel1->getActiveSheet()->setCellValue('C'.$i, $keywords);
        }
        $i++;
    }
}

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, 'Excel2007');
    $objWriter->save($target_file_path);

function file_get_contents_curl($url)
        {
            $ch = curl_init();

            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

            $data = curl_exec($ch);
            curl_close($ch);

            return $data;
        }
?>

このコードは少数のドメインでは正常に機能しますが、少数のドメインの場合、次のようなエラーがスローされます。

Warning: get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31

Warning: get_headers(http://www.mrmeticulous.com.au ): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31

Notice: Trying to get property of non-object in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 45

Warning: get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31

どこが間違っていますか?

ありがとうございました

4

1 に答える 1

0

私は自分自身をデバッグすることができました:)

解決策は簡単if conditionです追加する必要があります。交換

$nodes = $doc->getElementsByTagName('title');

        //get and display what you need:
        $title = $nodes->item(0)->nodeValue;

$nodes = $doc->getElementsByTagName('title');

($nodes->length>0) {
            //get and display what you need:
            $title = $nodes->item(0)->nodeValue;
        }

$nodes = $doc->getElementsByTagName('title');は、見つかった結果の長さを返します。ゼロの場合、警告がスローされました。

于 2015-05-26T02:48:17.927 に答える