IMDB-Parser
Skrev en snabb och simpel IMDB-parser i php som jag tänkte dela med mig av.
En snabb titt på hur det ser ut;
http://78.69.194.141/imdb.php
Användning (imdb.php);
Kod:
<?php
include('cImdbParser.php');
$cImdb = new cImdb();
if(isset($_POST['imdb']) && $_POST['imdb'] != "") {
if($cImdb->getData("http://www.imdb.com/title/tt1375666/")) {
echo "Data retrieved..<br />";
}
if($cImdb->getMovieTitle() == "") {
echo "Title does not exist..<br />";
}
else {
echo "Title: " . $cImdb->getMovieTitle() . "<br />";
}
if($cImdb->getFirstGenre() == "") {
echo "First genre does not exist..<br />";
}
else {
echo "First genre: " . $cImdb->getFirstGenre() . "<br />";
}
if($cImdb->getSecondGenre() == "") {
echo "Second genre does not exist..<br />";
}
else {
echo "Second genre: " . $cImdb->getSecondGenre() . "<br />";
}
if($cImdb->getYear() == "") {
echo "Year does not exist..<br />";
}
else {
echo "Year: " . $cImdb->getYear() . "<br />";
}
if($cImdb->getMovieRating() == "") {
echo "Rating does not exist..<br />";
}
else {
echo "Rating: " . $cImdb->getMovieRating() . "<br />";
}
echo '<a href="imdb.php">New search</a>';
}
else {
?>
<form method="post" action="imdb.php">
IMDB-Url (e.g. http://www.imdb.com/title/tt1375666/):<br />
<input type="text" name="imdb" />
<br />
<input type="submit" value="Retrieve data" />
</form>
<?php
}
?>
och klassen (cImdbParser.php);
Kod:
<?php
class cImdb
{
private $movieData;
private $genreOffset;
private $yearOffset;
function __construct()
{
$this->genreOffset = 13;
$this->yearOffset = 12;
}
function getData($movieUrl)
{
//Parse the HTML
$this->movieData = file_get_contents($movieUrl);
//If we couldnt get the contents, return false
if($this->movieData === FALSE) {
return false;
}
else {
return true;
}
}
function getYear()
{
$firstYearPos = strpos($this->movieData, "href=\"/year/");
if($firstYearPos > 0) {
//First year pos found
//Add the offset..
$firstYearPos += $this->yearOffset;
//Year should be 4 letters long :-P
$yearLength = 4;
//And then we get the year, if we do, return it.
$firstYear = substr($this->movieData, $firstYearPos, $yearLength);
//It doesnt matter if the string is empty, as we return empty string on false retrieval of year
return $firstYear;
}
else {
return "";
}
}
function getFirstGenre()
{
$firstGenrePos = strpos($this->movieData, "href=\"/genre/");
if($firstGenrePos > 0) {
//First Genre Found
//Add the genre string offset
$firstGenrePos += $this->genreOffset;
//Get the length of the genre, find the " after the /genre/
//In a string that looks like this href="/genre/Action"
$genreLength = strpos($this->movieData, "\"", $firstGenrePos)-$firstGenrePos;
//Get the genre by finding the html link to the genre.
$firstGenre = substr($this->movieData, $firstGenrePos, $genreLength);
//Return the genre
return $firstGenre;
}
else {
return "";
}
}
function getSecondGenre()
{
$firstGenrePos = strpos($this->movieData, "href=\"/genre/");
if($firstGenrePos > 0) {
//First Genre Found
//Add the genre string offset
$firstGenrePos += $this->genreOffset;
$secondGenrePos = strpos($this->movieData, "href=\"/genre/", $firstGenrePos);
if($secondGenrePos > 0) {
//Found second genre pos
//Add the genre offset again
$secondGenrePos += $this->genreOffset;
//Get the length of the genre, find the " after the /genre/
//In a string that looks like this href="/genre/Action"
$genreLength = strpos($this->movieData, "\"", $secondGenrePos)-$secondGenrePos;
//Get the genre by finding the html link to the genre.
$secondGenre = substr($this->movieData, $secondGenrePos, $genreLength);
//Return the genre
return $secondGenre;
}
else {
return "";
}
}
else {
return "";
}
}
function getMovieRating()
{
$ratingPos = strpos($this->movieData, 'title="Users rated this ');
if($ratingPos > 0) {
//Found rating position, proceed
$ratingOffset = strlen('title="Users rated this ');
//Add the offset to the position..
$ratingPos += $ratingOffset;
//Known length, always 3 (I think?)
$ratingLength = 3;
//Do the magic and get the rating from our data
$rating = substr($this->movieData, $ratingPos, $ratingLength);
return $rating;
}
else {
return "";
}
}
function getMovieTitle()
{
$titlePos = strpos($this->movieData, '<h1 class="header" itemprop="name">');
if($titlePos > 0) {
//Found the position of the title
//Add the offset
$titleOffset = strlen('<h1 class="header" itemprop="name">');
$titlePos += $titleOffset;
//Get the length of the title, find the newline after the needle
$titleLength = strpos($this->movieData, "\n", $titlePos+1)-$titlePos;
//Get the title
$title = substr($this->movieData, $titlePos, $titleLength);
//And return it..
return $title;
}
else {
return "";
}
}
}
?>
Simma lugnt!
|