0

別の Web サイトからテーブルを読み取り、それを自分の Web サイトに書き込むコードを作成しました。今、特定の行/列だけを読み込んで自分のサイトに書きたいと思っています。テーブルには気象データが入力され、5 分ごとに更新されます。行内のすべての値ではなく、1 時間と 30 分の値のみが必要ですが、温度だけが必要です。たとえば、温度値、湿度、日射量などを含む 5 分ごとの行があります。たとえば、05:00 の値を見つけて、その行の温度列のみを読み書きする必要があります。この場合、05:00 12.5°C になります。そして、48 個の値が必要です。1 日は 24 時間あり、さらに 24 時間の 30 分を含めると、全部で 48 になります。

これは私のコードの一部です:

<?php

$trazi = ':00';
$citaj = file('proba.txt');
foreach($citaj as $linija)
{
  if(strpos($linija, $trazi) !== false)
   echo $linija;
}

$traziURL = "somepage";
$stranica = file_get_contents($traziURL);
$tablica = '/(<table.*<\/table>)/s';
preg_match_all($tablica, $stranica, $zeit);
echo $zeit[0][0];
$ime = "proba.txt";
$table = fopen($ime, 'w') or die ("Error!");
$podaci = $zeit[0][0];

fwrite($table, $podaci);
fclose($table);

?>

一部の部品が欠落しているために機能しない可能性がありますが、アイデアを提供するだけです.

4

1 に答える 1

0

これを行うには他にもいくつかの方法があると確信していますが、私はこのようにします。

<?php

/**
 * @author Bart Degryse
 * @copyright 2013
 */

function getData() {
  //Get the html page
  $url = "http://www.essen-wetter.de/table.php";
  $content = file_get_contents($url);

  //Turn it into a dom document searchable by xpath
  $dom = new DOMDocument();
  $dom->loadHTML($content);
  $xpath = new DOMXPath($dom);

  //Get field names
  $query = "//tr/td[position()=1 and normalize-space(text()) = 'Zeit']";
  $entries = $xpath->query($query);
  $entry = $entries->item(0);
  $tr = $entry->parentNode;
  foreach ($tr->getElementsByTagName("td") as $td) {
    $fieldnames[] = $td->textContent;
  }

  //Get field data
  $query = "//tr/td[position()=1 and (substring-after(normalize-space(text()),':') = '00' or substring-after(normalize-space(text()),':') = '30')]";
  $entries = $xpath->query($query);
  foreach ($entries as $entry) {
    $fieldvalues = array();
    $tr = $entry->parentNode;
    foreach ($tr->getElementsByTagName("td") as $td) {
      $fieldvalues[] = $td->textContent;
    }
    $data[] = array_combine($fieldnames, $fieldvalues);
  }

  //Return data set
  return $data;
}

//Gather the data
$data = getData();

//Do something with it
echo "<pre>\n";
foreach ($data as $row) {
  echo "Temperature at {$row['Zeit']} was {$row['Temperatur']}.\n";
}
echo "</pre><hr><pre>\n";
print_r($data);
echo "</pre>\n";
?>

UTF-8 互換の端末や、UTF-8 でエンコードされていると宣言されている Web ページにデータを表示する場合は、これで十分です。ただし、シングルバイト ISO-8859-1 エンコーディングを使用する場合は、次の行を変更する必要があります。

    $fieldnames[] = $td->textContent;

これに:

    $fieldvalues[] = utf8_decode($td->textContent);

備考 これを行うことは技術的にはそれほど難しいことではありませんが、法的には緩い立場にあることに注意してください。そのページのデータの著作権は Markus Wolter が所有しています。彼の同意なしに自分の目的のために彼のデータを使用することは、盗難と見なされます。

于 2013-07-15T09:19:23.233 に答える