0

XML フィードは次の場所にあります: http://xml.betclick.com/odds_fr.xml

試合の名前、時間、賭けオプション、オッズ リンクをエコーする PHP ループが必要です。この関数は、その日のストリーミングが「1」でベットタイプが「Ftb_Mr3」の試合のみを選択して表示します。

xpath と simplexml は初めてです。

前もって感謝します。

これまでのところ、私は持っています:

<?php
$xml_str = file_get_contents("http://xml.betclick.com/odds_fr.xml");
$xml = simplexml_load_string($xml_str);

// need xpath magic
$xml->xpath();

// display

?>
4

3 に答える 3

3

Xpathは、コツをつかめば非常にシンプルです。

基本的に、特定の属性を持つすべての一致タグを取得する必要があります

//match[@streaming=1]

完全に機能し、属性streamingが1に等しい親タグの下からすべての一致タグを取得します

そして、私はあなたが「Ftb_Mr3」のベットタイプとの試合も望んでいることに気づきました

//match[@streaming=1]/bets/bet[@code="Ftb_Mr3"]

これはベットノードを返しますが、祖父母であることがわかっている一致が必要です

//match[@streaming=1]/bets/bet[@code="Ftb_Mr3"]/../..

2つのドットは、ファイルパスの場合と同じように機能し、一致します。

これをサンプルに組み込むには、最後のビットを次のように変更します。

// need xpath magic
$nodes = $xml->xpath('//match[@streaming=1]/bets/bet[@code="Ftb_Mr3"]/../..');

foreach($nodes as $node) {
    echo $node['name'].'<br/>';
}

すべての一致名を出力します。

于 2009-10-31T04:42:17.640 に答える
0

これをプロジェクトで使用しています。Beclic オッズをスクレイピングする:

<?php
        $match_csv = fopen('matches.csv', 'w');
        $bet_csv = fopen('bets.csv', 'w');
        $xml = simplexml_load_file('http://xml.cdn.betclic.com/odds_en.xml');
        $bookmaker = 'Betclick';
        foreach ($xml as $sport) {
            $sport_name = $sport->attributes()->name;
            foreach ($sport as $event) {
                $event_name = $event->attributes()->name;
                foreach ($event as $match) {
                    $match_name = $match->attributes()->name;
                    $match_id = $match->attributes()->id;
                    $match_start_date_str = str_replace('T', ' ', $match->attributes()->start_date);
                    $match_start_date = strtotime($match_start_date_str);
                    if (!empty($match->attributes()->live_id)) {
                        $match_is_live = 1;
                    } else {
                        $match_is_live = 0;
                    }
                    if ($match->attributes()->streaming == 1) {
                        $match_is_running = 1;
                    } else {
                        $match_is_running = 0;
                    }
                    $match_row = $match_id . ',' . $bookmaker . ',' . $sport_name . ',' . $event_name . ',' . $match_name . ',' . $match_start_date . ',' . $match_is_live . ',' . $match_is_running;
                    fputcsv($match_csv, explode(',', $match_row));
                    foreach ($match as $bets) {
                        foreach ($bets as $bet) {
                            $bet_name = $bet->attributes()->name;
                            foreach ($bet as $choice) {
                                // team numbers are surrounded by %, we strip them
                                $choice_name = str_replace('%', '', $choice->attributes()->name);
                                // get the float value of odss
                                $odd = (float)$choice->attributes()->odd;
                                // concat the row to be put to csv file
                                $bet_row = $match_id . ',' . $bet_name . ',' . $choice_name . ',' . $odd;
                                fputcsv($bet_csv, explode(',', $bet_row));
                            }
                        }
                    }
                }
            }
        }
        fclose($match_csv);
        fclose($bet_csv);
?>

次に、csv ファイルを mysql にロードします。1分に1回実行すると、これまでのところうまくいきます。

于 2014-12-11T02:05:40.847 に答える