1

option自分のWebサイトで現在のUbuntuディストリビューションがサポートしていることを示すために、ppaからタグを追加しようとしています。

これは私がこれまでに持っているものです。

<?php include 'https://launchpad.net/~gregory-hainaut/+archive/pcsx2.official.ppa#field.series'; ?>

これはoptionタグの内容です:

<select onchange="updateSeries(this);" size="1" name="field.series" id="field.series">
<option value="YOUR_UBUNTU_VERSION_HERE" selected="selected">Choose your Ubuntu version</option>
<option value="trusty">Trusty (14.04)</option>
<option value="saucy">Saucy (13.10)</option>
<option value="raring">Raring (13.04)</option>
<option value="quantal">Quantal (12.10)</option>
<option value="precise">Precise (12.04)</option>
<option value="lucid">Lucid (10.04)</option>
</select>
4

1 に答える 1

2

file_get_contents(または) を使用curlして実際のソース コードを取得し、 (たとえば) を使用して解析する必要がありますDOMDocument。たとえば、次のようなことを試すことができます。

最初に、ノードの innerHTML を取得できる関数を定義します ( Hiamに感謝します)。

function DOMinnerHTML(DOMNode $element) 
    { 
        $innerHTML = ""; 
        $children  = $element->childNodes;

        foreach ($children as $child) 
        { 
            $innerHTML .= $element->ownerDocument->saveHTML($child);
        }

        return $innerHTML; 
    } 

次に、コンテンツを取得し、ID で選択メニューを取得します

$ppa = file_get_contents('https://launchpad.net/~gregory-hainaut/+archive/pcsx2.official.ppa#field.series');

$doc = new DomDocument;
$doc->loadHTML($ppa);
$innerHTML = DOMinnerHTML($doc->getElementById('field.series_filter'));

エコー$innerHTMLすると、結果は次のようになります。

<option value="">Any series</option>
<option value="trusty">Trusty</option>
<option value="saucy">Saucy</option>
<option value="raring">Raring</option>
<option value="quantal">Quantal</option>
<option value="precise">Precise</option>
<option value="lucid">Lucid</option>

その結果から、選択メニューの内側の htmlしか取得していないことがわかります。したがって、返された innerHTML をselectタグでラップする必要があります。

<select name='[your name]' [...other properties]>
<?=$innerHTML;?>
</select>

編集

OPはコメントで、すべてが機能していると述べましたが、上で選択したものとは異なる選択メニューが必要です。彼がスクレイピングしているページには無効なマークアップがあるため(2 つの別々selectのメニューに同じ がありますid)、DOMDocument getElementById呼び出しは正しいノードを取得していません。これを修正するには、最初に親ノードを取得してからクエリを実行して探しているアイテムを見つけることができるように、DOM ツリーを見て一意の親要素を調整する必要があります。この場合、OP が必要とするメニューはdivID が "" の の中にあるため、そのノードを取得してから、 を使用getElementsByTagNameして選択メニューを取得します。

//... get the code (set in $ppa) as per the original section
$doc->loadHTML($ppa);

//Grab the parent div because it has a unique ID
$parent_div = $doc->getElementById('series-widget-div');
//then seach for all <select> tags and grab the first one
$select_menu = $parent_div->getElementsByTagName('select')->item(0);
//... and now we're ready to get the innerHTML
$innerHTML = DOMinnerHTML( $select_menu );
//echo it out!
echo $innerHTML;
于 2014-01-26T17:58:52.673 に答える