web-dev-qa-db-ja.com

トランジェントを使用したWebスクリプト

私はxPathを使って他のウェブサイトからツアー日程を収集しています(もちろん許可を得て)。ページが読み込まれるたびに更新されるので、一時データを使ってデータを保存することを考えました。

残念ながら、私はトランジェントを使用した経験がなく、それを機能させることができません。これは私のコードです:

<?php
  $html = file_get_contents('http://www.example.com');       
  $doc = new DOMDocument();

  libxml_use_internal_errors(TRUE); // disable libxml errors

  if(!empty($html)) {

    $doc->loadHTML($html);
    libxml_clear_errors();

    $xpath = new DOMXPath($doc);

    // Get only the content needed
    $termine = $xpath->query('//ul[@class="artistEvents"]/li');            

    if ($termine->length > 0) {
      foreach ($termine as $termin) { 

        $date = $xpath->query("div[@class='left']/strong", $termin);
        $location = $xpath->query("div[contains(@class,'right')]", $termin);

        echo '<tr>';

        // Date     
        if ($date->length > 0) {
          $date = substr($date->item(0)->nodeValue, 3, 10);
          $date = strftime("%d.%m.%Y", strtotime($date));
          echo '<td class="live-date">' . $date . '</td>';
        }

        // Location
        if ($location->length > 0) {
          $location = substr($location->item(0)->nodeValue, 14);
          $location = utf8_decode($location);
          echo '<td class="live-location">' . $location . '</td>';
        }

        echo '</tr>';
      }
    }

    else {
      echo '<p>No dates available.</p>';
    }

  }
?>

このクエリを格納するためにトランジェントを使用する方法についての任意の助けは大歓迎です!また、私は以前xPathを使ったことがないので、コードに何らかの改善が必要な場合は(それは機能しますが)、それについて知って幸せになります。

本当にありがとう!

1
Stefan

このようなことを試してみてください。これは12時間の一時的な節約になります。何も意味がないのかどうか教えてください。

<?php
$value = get_transient( 'value' );
if ( false === $value ) {
  $output = "";
  $html = file_get_contents('http://www.example.com');       
  $doc = new DOMDocument();

  libxml_use_internal_errors(TRUE); // disable libxml errors

  if(!empty($html)) {

    $doc->loadHTML($html);
    libxml_clear_errors();

    $xpath = new DOMXPath($doc);

    // Get only the content needed
    $termine = $xpath->query('//ul[@class="artistEvents"]/li');            

    if ($termine->length > 0) {
      foreach ($termine as $termin) { 

        $date = $xpath->query("div[@class='left']/strong", $termin);
        $location = $xpath->query("div[contains(@class,'right')]", $termin);

        $output .= '<tr>';

        // Date     
        if ($date->length > 0) {
          $date = substr($date->item(0)->nodeValue, 3, 10);
          $date = strftime("%d.%m.%Y", strtotime($date));
          $output .= '<td class="live-date">' . $date . '</td>';
        }

        // Location
        if ($location->length > 0) {
          $location = substr($location->item(0)->nodeValue, 14);
          $location = utf8_decode($location);
          $output .= '<td class="live-location">' . $location . '</td>';
        }

        $output .= '</tr>';
      }
    }
    else {
      $output .= '<p>No dates available.</p>';
    }
  }
  $value = $output;
  set_transient( 'value', $value, 12 * HOUR_IN_SECONDS );

}
echo $value;
?>
3
czerspalace