Example #1
0
 /**
  * This method searches the IMDB (using the unofficial API) for the passed in film title.  I return the entire SimpleXML Object
  * WARNING this web service is in hot water with Amazon owner of IMDB so I am moving away from it towards Rotten Tomatoes 
  *
  * @param string
  * @return SimpleXML Object
  */
 protected function searchIMDBForFilm($filmTitle)
 {
     $movieInfo = NULL;
     // A lot of people have wanted to search or scrape the IMDB with an API or PHP.  Amazon owns the website so it is possible some of this
     // data is in the main Amazon Product Advertising API.  I've already noticed how Wikipedia and Rotten Tomatoes occaisionally have the same
     // exact text.
     // The default is to return data in JSON format, but XML is also supported.  Here is what a query URL should look like:
     // http://www.imdbapi.com/?t=True Grit&y=1969
     // spaces need to be encoded.
     // This works well as I always pass in titles of films that I've already found in Rotten Tomatoes, this isn't an official precondition and
     // I should probably cache this just like so much other data.
     // first check that we don't have a local cached version, no reason to get lazy
     $properFileName = preg_replace("/[^a-zA-Z0-9]/", "", $filmTitle);
     if (strlen($properFileName) > 0) {
         $myCache = new Caching("./MashupCache/IMDB/", $properFileName);
         if ($myCache->needToRenewData()) {
             try {
                 $encodedTitle = urlencode($filmTitle);
                 $queryURL = 'http://www.omdbapi.com/?t=' . $encodedTitle . '&plot=full';
                 // I prefer the long version of the plot
                 $queryResult = fetchThisURL($queryURL);
                 $movieInfo = json_decode($queryResult);
             } catch (Exception $e) {
                 echo $e->getMessage();
             }
             $serializedObject = serialize($movieInfo);
             $myCache->saveSerializedDataToFile($serializedObject);
         } else {
             // It doesn't need to be renewed so use local copy
             $movieInfo = $myCache->getUnserializedData();
         }
     }
     /*
     // We need to see if this method is still reliable, given Amazon's litigation. Works but not for posters.
     print("<pre>");
     print_r($movieInfo);
     print("</pre>");
     */
     return $movieInfo;
 }
 /**
  * This method searches the iTunes store and returns the artist page, or best guess at the product page.
  *
  * @param array
  * @return Simple XML object
  */
 protected function getResultsFromITunesForSourceOfQuotation($quotation)
 {
     // This method replaces getArtistResultsFromITunes() but follows the basic technique caching the results.
     $iTunesInfo = null;
     $strippedSource = $quotation[0];
     $strippedSource = preg_replace("/[^a-zA-Z0-9]/", "", $strippedSource);
     if (is_string($quotation[0]) && strlen($strippedSource) > 0) {
         $myCache = new Caching("./MashupCache/iTunes/", $strippedSource);
         if ($myCache->needToRenewData()) {
             try {
                 // Now we will have a three or more pronged approach, just like many methods in this class
                 if ($this->isFromFilm($quotation)) {
                     // Here we want media to be movie
                     $formattedSource = str_replace(' ', '+', $quotation[0]);
                     $iTunesSearchString = 'http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?term=' . $formattedSource . '&entity=movie&media=movie';
                 } else {
                     if ($this->isFromSong($quotation) || $this->isFromMusician($quotation)) {
                         // This can be the same give or take as the parent class, searching for an artist page.
                         $formattedArtistString = str_replace(' ', '+', $quotation[0]);
                         $iTunesSearchString = 'http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?term=' . $formattedArtistString . '&entity=musicArtist';
                     } else {
                         // This is going to be less likely to return results from the iTunes store, but it has so much stuff now so who knows
                         // Going to go with media of type ebook
                         $formattedSource = str_replace(' ', '+', $quotation[0]);
                         $iTunesSearchString = 'http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?term=' . $formattedSource . '&entity=ebook&media=ebook';
                     }
                 }
                 $searchResult = fetchThisURL($iTunesSearchString);
                 $iTunesInfo = json_decode($searchResult);
             } catch (Exception $e) {
                 echo $e->getMessage();
             }
             $serializedObject = serialize($iTunesInfo);
             $myCache->saveSerializedDataToFile($serializedObject);
         } else {
             // It doesn't need to be renewed so use local copy of array
             $iTunesInfo = $myCache->getUnserializedData();
         }
     } else {
         throw new Exception('Incorrect data type passed to getResultsFromITunesForSourceOfQuotation()');
     }
     return $iTunesInfo;
 }
Example #3
0
 /**
  * This method searches the Wikipedia for the passed in string.  Not sure what format I'll return probably SimpleXML object.
  *
  * @param string the search query
  * @return the number one result for the search in Wikipedia
  */
 public function searchWikipediaFor($searchString)
 {
     // My Wikipedia search code is based on this example: http://adamzwakk.com/?p=383
     $searchResults = fetchThisURL('http://en.wikipedia.org/w/api.php?action=opensearch&search=' . urlencode($searchString) . '&format=xml&limit=1');
     $wikiXML = simplexml_load_string($searchResults);
     return $wikiXML;
 }
Example #4
0
 /**
  * This method I created as part of my favourite or loved tracks mashup.  The code is for creating an instance of this
  * class populated by the albums that correspond to a user's loved tracks in last.fm.  By putting the code here as a static method
  * future users of this class can populate their music collection with this info too.
  *
  * In the array I also put the track name and the url on Last.fm, I used non-numeric indices for this extra data.
  *
  * @return musicCollection
  */
 public static function collectionFromLovedTracks()
 {
     $lovedTracksInfo = array();
     $myLovedTracks = musicCollection::getLovedTracksFor(myInfo::MY_LAST_FM_USER_NAME);
     // New Caching Code
     $strippedUserName = preg_replace("/[^a-zA-Z0-9]/", "", myInfo::MY_LAST_FM_USER_NAME);
     if (strlen($strippedUserName) > 0) {
         $strippedUserName = $strippedUserName . 'LovedTracks';
         $myCache = new Caching("./MashupCache/LovedTracks/", $strippedUserName);
         if ($myCache->needToRenewData()) {
             $lovedTracksCount = count($myLovedTracks);
             $artistName = '';
             $albumTitle = '';
             $songTitle = '';
             $songURL = '';
             $i = 0;
             while ($i < $lovedTracksCount) {
                 // Need album titles
                 $formattedSongTitle = str_replace(' ', '+', $myLovedTracks[$i]['name']);
                 // http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?term=song+title&entity=musicTrack
                 $iTunesSearch = 'http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?term=' . $formattedSongTitle . '&media=music&entity=musicTrack&attribute=musicTrackTerm';
                 $iTunesSearchResults = fetchThisURL($iTunesSearch);
                 $iTunesResults = json_decode($iTunesSearchResults);
                 $artistName = $myLovedTracks[$i]['artist']['name'];
                 $songTitle = $myLovedTracks[$i]['name'];
                 $songURL = 'http://' . $myLovedTracks[$i]['url'];
                 // This should solve some linking issues...
                 if ($iTunesResults->resultCount > 0) {
                     $j = 0;
                     $foundAlbum = false;
                     while ($j < $iTunesResults->resultCount && !$foundAlbum) {
                         if (strcmp($iTunesResults->results[$j]->artistName, $myLovedTracks[$i]['artist']['name']) == 0) {
                             $albumTitle = $iTunesResults->results[$j]->collectionName;
                             $foundAlbum = true;
                         }
                         $j++;
                     }
                     // if we don't find one, such as in the case of Tom Waits "Looking for the heart of Saturday Night" , we are end up with the wrong data...
                     if (!$foundAlbum) {
                         // This is necessary
                         $albumTitle = '';
                     }
                 } else {
                     $albumTitle = '';
                 }
                 $lovedTracksInfo[$i] = array(0 => $artistName, 1 => $albumTitle, 'songTitle' => $songTitle, 'songURL' => $songURL);
                 $i++;
             }
             $reformatedTracks = serialize($lovedTracksInfo);
             $myCache->saveSerializedDataToFile($reformatedTracks);
         } else {
             // It doesn't need to be renewed so use local copy of array
             $lovedTracksInfo = $myCache->getUnserializedData();
         }
     }
     return new musicCollection($lovedTracksInfo);
 }