0

I'm looking to embed a random related video using the youtube api, I found the following code but I need to change the form code to a keyword variable (I'll use the product title as the variable) this code uses a form input instead. How can I change the code to use a defined variable?

<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Searching for videos by keyword</title>
    <style>
    img {
      padding: 2px; 
      margin-bottom: 15px;
      border: solid 1px silver; 
    }
    td {
      vertical-align: top;
    }
    td.line {
      border-bottom: solid 1px black;  
    }
    </style>
  </head>
  <body>
    <?php
    // if form not submitted
    // display search box
    if (!isset($_POST['submit'])) {
    ?>
    <h1>Keyword search</h1>  
    <form method="post" action="<?php echo 
      htmlentities($_SERVER['PHP_SELF']); ?>">
      Keywords: <br/>
      <input type="text" name="q" />
      <p/>
      Items to display: <br/>
      <select name="i">
        <option value="10">10</option>
        <option value="25">25</option>
        <option value="50">50</option>
        <option value="100">100</option>
      </select>
      <p/>
      <input type="submit" name="submit" value="Search"/>  
    </form>
    <?php      
    // if form submitted
    } else {
      // check for search keywords
      // trim whitespace
      // separate multiple keywords with /
      if (!isset($_POST['q']) || empty($_POST['q'])) {
        die ('ERROR: Please enter one or more search keywords');
      } else {
        $q = $_POST['q'];
        $q = ereg_replace('[[:space:]]+', '/', trim($q));
      }

      // set max results
      if (!isset($_POST['i']) || empty($_POST['i'])) {
        $i = 25;
      } else {
        $i = $_POST['i'];
      }

      // generate feed URL
      $feedURL = "http://gdata.youtube.com/feeds/api/videos/-/{$q}
      ?orderby=viewCount&max-results={$i}";

      // read feed into SimpleXML object
      $sxml = simplexml_load_file($feedURL);

      // get summary counts from opensearch: namespace
      $counts = $sxml->children('http://a9.com/-/spec/opensearchrss/1.0/');
      $total = $counts->totalResults; 
      $startOffset = $counts->startIndex; 
      $endOffset = ($startOffset-1) + $counts->itemsPerPage;       
      ?>

      <h1>Search results</h1>
      <?php echo $total; ?> items found. Showing items 
      <?php echo $startOffset; ?> to <?php echo $endOffset; ?>:
      <p/>

      <table>
      <?php    
      // iterate over entries in resultset
      // print each entry's details
      foreach ($sxml->entry as $entry) {
        // get nodes in media: namespace for media information
        $media = $entry->children('http://search.yahoo.com/mrss/');

        // get video player URL
        $attrs = $media->group->player->attributes();
        $watch = $attrs['url']; 

        // get video thumbnail
        $attrs = $media->group->thumbnail[0]->attributes();
        $thumbnail = $attrs['url']; 

        // get <yt:duration> node for video length
        $yt = $media->children('http://gdata.youtube.com/schemas/2007');
        $attrs = $yt->duration->attributes();
        $length = $attrs['seconds']; 

        // get <gd:rating> node for video ratings
        $gd = $entry->children('http://schemas.google.com/g/2005'); 
        if ($gd->rating) {
          $attrs = $gd->rating->attributes();
          $rating = $attrs['average']; 
        } else {
          $rating = 0; 
        }

        // print record
        echo "<tr><td colspan=\"2\" class=\"line\"></td>
        </tr>\n";
        echo "<tr>\n";
        echo "<td><a href=\"{$watch}\"><img src=\"$thumbnail\"/></a></td>\n";
        echo "<td><a href=\"{$watch}\">
        {$media->group->title}</a><br/>\n";
        echo sprintf("%0.2f", $length/60) . " min. | {$rating} user 
        rating<br/>\n";
        echo $media->group->description . "</td>\n";
        echo "</tr>\n";
      }
    }
    ?>
    </table>
  </body>
</html>
Jeremy W
  • 1,889
  • 6
  • 29
  • 37

1 Answers1

0

Just set a variable that will hold your keywords, e.g. $array=['cat',mouse'dog']. Also you can set a variable that will get data/pre-set keywords in your database, pass it on a for each loop then insert your embed code.

Here is the guide in embedding Youtube video.

// mysql/data of keywords  
$array=['cat',mouse'dog']  
foreach( $array as $keyword){
//embed video
}

Based on this tutorial, on how to embed Youtube video by keywords.

The recommended method for embedding a Youtube is by using IFrame. Because IFrame will select the appropriate player based on the client’s capabilities and available YouTube file formats.

An <iframe> tag in your application in which the src URL specifies the content that the player will load as well as any other player parameters you want to set.

If you are creating the <iframe> element yourself (rather than using the IFrame Player API to create it), you can append player parameters directly to the end of the URL. The URL has the following format :

http://www.youtube.com/embed/VIDEO_ID 

The <iframe> tag below would load a 640 x 480px player that would play the YouTube video doLy-jFSFNo.

Since the URL sets the autoplay parameter to 1, the video would play automatically once the player has loaded.

<iframe id="ytplayer" src="http://www.youtube.com/embed/doLy-jFSFNo?autoplay=1&origin=http://www.mr2t.com" frameborder="0" width="640" height="480"></iframe>

Also try to check this, How to embed YouTube videos in PHP?

Community
  • 1
  • 1
KENdi
  • 7,576
  • 2
  • 16
  • 31