PHP code example of resoul / imdb

1. Go to this page and download the library: Download resoul/imdb library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

resoul / imdb example snippets



use resoul\imdb\Parser;
use resoul\imdb\model\IMDB;

// Initialize parser with cache directory
$parser = new Parser();
$parser->setCacheFolder('/path/to/cache/');

try {
    // Parse weekend box office data
    $weekendData = $parser
        ->byWeekend('2024W48')
        ->run();
    
    echo "Weekend: " . $weekendData->getTitle() . "\n";
    
    foreach ($weekendData->getReleases() as $release) {
        echo sprintf(
            "#%d: %s - $%s\n",
            $release->getRank(),
            $release->getRelease(),
            number_format($release->getGross())
        );
    }
    
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

public function __construct()

$parser = new Parser();

$parser->setCacheFolder('/var/cache/imdb/');

$parser->byWeekend('2024W48');

$parser->byYear('2024');

$parser->bySource('https://www.boxofficemojo.com/custom-url/');

$data = $parser->byWeekend('2024W48')->run();

$film = $parser
    ->bySource('https://pro.imdb.com/title/tt123456/')
    ->parseTitle();

public function getTitle(): string
public function getReleases(): array // Returns Release[]

public function getRank(): int
public function getLastWeek(): int
public function getRelease(): string
public function getUri(): string
public function getGross(): int
public function getTheaters(): int
public function getTotal(): int
public function getWeeks(): int
public function getFilm(): Film
public function setFilm(Film $film): void

public function getUID(): string
public function getRelease(): string
public function getOriginal(): string
public function getPoster(): string
public function getDescription(): string
public function getReleaseDate(): string
public function getDuration(): string
public function getCertificate(): string
public function getBudget(): ?int
public function getOpening(): ?int
public function getOpeningTheaters(): ?int
public function getWideRelease(): ?int
public function getSeasons(): int
public function getReleaseSummary(): ?string
public function getCast(): ?array // Returns Actor[]
public function getGross(): Gross
public function getType(): FilmTypeEnum
public function getDistributor(): ?DistributorEnum
public function getGenres(): array // Returns GenreEnum[]

public function getDomestic(): ?int
public function getInternational(): ?int
public function getWorldwide(): ?int

public function getOriginal(): string
public function getUri(): string
public function getRole(): RoleEnum
public function getRoleName(): ?string
public function getPoster(): ?string


use resoul\imdb\Parser;

$parser = new Parser();
$parser->setCacheFolder('./cache/');

try {
    $data = $parser->byWeekend('2024W48')->run();
    
    echo "=== " . $data->getTitle() . " ===\n\n";
    
    foreach ($data->getReleases() as $release) {
        $film = $release->getFilm();
        
        printf(
            "Rank #%d: %s\n" .
            "  Weekend Gross: $%s\n" .
            "  Theaters: %s\n" .
            "  Weeks in Release: %d\n" .
            "  Genre: %s\n" .
            "  Rating: %s\n" .
            "  Runtime: %s min\n\n",
            $release->getRank(),
            $film->getOriginal(),
            number_format($release->getGross()),
            number_format($release->getTheaters()),
            $release->getWeeks(),
            implode(', ', array_map(fn($g) => $g->name, $film->getGenres())),
            $film->getCertificate(),
            $film->getDuration()
        );
    }
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}


use resoul\imdb\Parser;

$parser = new Parser();
$parser->setCacheFolder('./cache/');

try {
    $data = $parser->byYear('2024')->run();
    
    echo "=== Top 10 Films of 2024 ===\n\n";
    
    $top10 = array_slice($data->getReleases(), 0, 10);
    
    foreach ($top10 as $release) {
        $film = $release->getFilm();
        $gross = $film->getGross();
        
        printf(
            "#%d: %s\n" .
            "  Total Gross: $%s\n" .
            "  Budget: $%s\n" .
            "  Distributor: %s\n" .
            "  Release Date: %s\n\n",
            $release->getRank(),
            $film->getOriginal(),
            number_format($release->getGross()),
            $film->getBudget() ? '$' . number_format($film->getBudget()) : 'Unknown',
            $film->getDistributor()?->name ?? 'Unknown',
            date('F j, Y', strtotime($film->getReleaseDate()))
        );
    }
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}


use resoul\imdb\Parser;

$parser = new Parser();
$parser->setCacheFolder('./cache/');

try {
    $film = $parser
        ->bySource('https://pro.imdb.com/title/tt15398776/')
        ->parseTitle();
    
    echo "=== " . $film->getOriginal() . " ===\n\n";
    echo "Description: " . $film->getDescription() . "\n\n";
    echo "Release Date: " . date('F j, Y', strtotime($film->getReleaseDate())) . "\n";
    echo "Runtime: " . $film->getDuration() . " minutes\n";
    echo "Rating: " . $film->getCertificate() . "\n";
    echo "Genres: " . implode(', ', array_map(fn($g) => $g->name, $film->getGenres())) . "\n\n";
    
    // Cast information
    $cast = $film->getCast();
    if ($cast) {
        echo "=== Cast & Crew ===\n";
        foreach ($cast as $person) {
            echo sprintf(
                "%s: %s%s\n",
                $person->getRole()->name,
                $person->getOriginal(),
                $person->getRoleName() ? ' as ' . $person->getRoleName() : ''
            );
        }
    }
    
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}


use resoul\imdb\Parser;
use resoul\imdb\model\enum\FilmTypeEnum;

class BoxOfficeAnalyzer {
    private Parser $parser;
    
    public function __construct(string $cacheDir) {
        $this->parser = new Parser();
        $this->parser->setCacheFolder($cacheDir);
    }
    
    public function getTopMoviesOnly(string $weekend): array {
        try {
            $data = $this->parser->byWeekend($weekend)->run();
            $movies = [];
            
            foreach ($data->getReleases() as $release) {
                $film = $release->getFilm();
                
                // Filter only movies (exclude TV series)
                if ($film->getType() === FilmTypeEnum::MOVIE) {
                    $movies[] = [
                        'rank' => $release->getRank(),
                        'title' => $film->getOriginal(),
                        'gross' => $release->getGross(),
                        'theaters' => $release->getTheaters(),
                        'poster' => $film->getPoster(),
                        'description' => $film->getDescription(),
                    ];
                }
            }
            
            return $movies;
            
        } catch (Exception $e) {
            error_log("Failed to parse weekend data: " . $e->getMessage());
            return [];
        }
    }
    
    public function calculateMetrics(array $movies): array {
        if (empty($movies)) {
            return ['error' => 'No data available'];
        }
        
        $totalGross = array_sum(array_column($movies, 'gross'));
        $totalTheaters = array_sum(array_column($movies, 'theaters'));
        $avgPerTheater = $totalTheaters > 0 ? $totalGross / $totalTheaters : 0;
        
        return [
            'total_gross' => $totalGross,
            'total_theaters' => $totalTheaters,
            'average_per_theater' => $avgPerTheater,
            'movie_count' => count($movies),
        ];
    }
}

// Usage
$analyzer = new BoxOfficeAnalyzer('./cache/');
$movies = $analyzer->getTopMoviesOnly('2024W48');
$metrics = $analyzer->calculateMetrics($movies);

echo "Weekend Box Office Metrics:\n";
echo "Total Gross: $" . number_format($metrics['total_gross']) . "\n";
echo "Average per Theater: $" . number_format($metrics['average_per_theater']) . "\n";

try {
    $data = $parser->byWeekend('2024W48')->run();
    
    // Always check if releases exist
    if (empty($data->getReleases())) {
        echo "No box office data found for this period.\n";
        return;
    }
    
    foreach ($data->getReleases() as $release) {
        // Check if film data was successfully parsed
        try {
            $film = $release->getFilm();
            // Process film data...
        } catch (Exception $e) {
            echo "Failed to get film details for: " . $release->getRelease() . "\n";
            continue;
        }
    }
    
} catch (Exception $e) {
    // Log error for debugging
    error_log("Parser error: " . $e->getMessage());
    
    // Provide user-friendly message
    echo "Unable to retrieve box office data. Please try again later.\n";
}

// Cache files are stored as: {cache_folder}/{parsed_url}.html
// Pro IMDB pages are prefixed: pro.{parsed_url}.html

$data = $parser->byYear('2024')->run();
$releases = $data->getReleases();

// Process in chunks of 10
foreach (array_chunk($releases, 10) as $batch) {
    foreach ($batch as $release) {
        // Process release...
    }
    
    // Optional: Clear memory between batches
    if (function_exists('gc_collect_cycles')) {
        gc_collect_cycles();
    }
}