-1

アプリ名を取得するための情報について、Google Play リンクをスクレイピングしています。

問題は、一部のアプリケーションが判読できない文字を返すことです。

        $div2 = $div->getElementsByTagName("div");
        if ($div2->length)
        {
            $gpAppName = DOMinnerHTML($div2->item(0));
            $counter++;
            if(checkIfMaxedOutAndReturn($counter)){
                buildObjAndReturn($gpIcon,$gpBg,$gpAppName,$gpBtnLink);
            }
        }
        function DOMinnerHTML($element)
        {
            $innerHTML = "";
            $children = $element->childNodes;
            foreach ($children as $child)
            {
                $tmp_dom = new DOMDocument('1.0','UTF-8');
                $tmp_dom->appendChild($tmp_dom->importNode($child, true));
                $innerHTML.=trim($tmp_dom->saveHTML());
            }
            return $innerHTML;
        }

ページをスクラップする場合: https://play.google.com/store/apps/details?id=com.vascogames.TransportTruck、ここに表示されるコードは、「トラック ドライバー – 貨物配達」というアプリ名をスクレイピングしますが、コードは「トラック ドライバー - 貨物配達」を返します

4

1 に答える 1

0

根底にある libxml2 ライブラリはエンコーディングを指定する HTML タグを探しますが、Google Play ページはそれを提供しません。ソースを解析する前にメタタグをソースに挿入する簡単な解決策を次に示します。

<?php

$url = 'https://play.google.com/store/apps/details?id=com.vascogames.TransportTruck';

$source = file_get_contents($url);
$source = str_replace(
  '<head>',
  '<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">',
  $source
);

$dom = new DOMDocument;
@$dom->loadHTML($source);

$divs = $dom->getElementsByTagName('div');

foreach ($divs as $div) {
  if ($div->getAttribute('class') === 'document-title') {
    echo trim($div->textContent);
    echo "\n";
  }
}
于 2013-08-13T14:56:17.760 に答える