# tMDbのAPIを使用して今まで観た映画をリスト化してみましたよ.
おはようございます.[tMDb](https://www.themoviedb.org/)のAPIを使用して今まで観た映画をリスト化してみましたよ.sqliteの構造は下記になります.idはbigintと記載していますが、AUTO\_INCREMENTの間違いです🐼.
Xにも呟きましたがAPIを使用して何かするのはこの頃飽きてきて触らなかったのですが、たまには触れてみようとコードを書いているうちに簡単に作れるようになってしまって少々物足りなさを感じています.
次回はAPIを使う側ではなくて作る側になろうと思っています.GW期間になると思いますが600円のレンタルサーバーのフリードメインを使ってツマラナイAPIみたいな失笑系を作ってみます.
なお、ソースコードの解説がなくてすみません、このソースコードを生成AIに投げてどのような処理か説明して言えば恐らく正解を教えてくれます.
明日へ続く
```
#真相をお話します.
少年と犬
Flow
```
```
curl -sS https://getcomposer.org/installer | php
composer require guzzlehttp/guzzle
composer require illuminate/database
```
```
<?php
require_once 'config.php';
require_once 'vendor/autoload.php';
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Database\Capsule\Manager as DB;
class MovieList
{
public $result = '';
public $imgBasicUrl = 'https://image.tmdb.org/t/p/w500';
public $filePath = FILEPATH_DIR_;
public function __construct($filePath='')
{
$filePath = $filePath?$filePath:$this->filePath;
if (!file_exists($filePath.'/movie-list.db')) {
exit;
}
$capsule = new Capsule();
$capsule->addConnection([
'driver' => 'sqlite',
'database' => $filePath.'/movie-list.db',
'prefix' => '',
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();
}
public function getMovieList(string $q): void
{
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.themoviedb.org/3/search/multi?query=' . $q . '&include_adult=false&language=ja-JP&page=1', [
'headers' => [
'Authorization' => 'Bearer ' . API_KEY,
'accept' => 'application/json',
],
]);
$this->result = $response->getBody();
}
public function getResult(): void
{
$data = DB::table('list')->get();
$lists = [];
foreach ($data as $key => $value) {
$result = unserialize($value->value);
if(isset($result?->media_type) && $result->media_type == 'movie'){
$lists[] = [
'id'=>$data[$key]->id,
'title'=>$result->title,
'img'=>$this->imgBasicUrl . $result->poster_path,
];
}
}
print json_encode($lists);
}
public function saveCsvlist(): void
{
$fileData = explode("\n",file_get_contents('movie-list.csv'));
$fileData = array_reverse($fileData);
foreach($fileData as $line)
{
foreach(explode(',',$line) as $data){
$q = urlencode($data);
$movieList = new MovieList();
$movieList->getMovieList($q);
foreach((json_decode($movieList->result))?->results as $result){
DB::table('list')->insert([
'value' => serialize($result)
]);
}
}
}
}
public function delete($id): void
{
DB::table('list')->where('id', '=', $id)->delete();
print json_encode(['res'=>'true']);
}
}
//(new MovieList())->saveCsvlist();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!isset($_POST['id'])){
(new MovieList())->getResult();
}else{
//(new MovieList())->delete($_POST['id']);
}
}
```
[  サイトを分離した話を黙々と書いていきます.
](https://zip358.com/2026/02/04/%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e5%88%86%e9%9b%a2%e3%81%97%e3%81%9f%e8%a9%b1%e3%82%92%e9%bb%99%e3%80%85%e3%81%a8%e6%9b%b8%e3%81%84%e3%81%a6%e3%81%84%e3%81%8d%e3%81%be%e3%81%99.html)
[  半額セールでアドビ様を延長.
](https://zip358.com/2026/02/03/%e5%8d%8a%e9%a1%8d%e3%82%bb%e3%83%bc%e3%83%ab%e3%81%a7%e3%82%a2%e3%83%89%e3%83%93%e6%a7%98%e3%82%92%e5%bb%b6%e9%95%b7.html)
[  何の前触れもなく変えたのは初めてかも.
](https://zip358.com/2026/02/02/%e4%bd%95%e3%81%ae%e5%89%8d%e8%a7%a6%e3%82%8c%e3%82%82%e3%81%aa%e3%81%8f%e5%a4%89%e3%81%88%e3%81%9f%e3%81%ae%e3%81%af%e5%88%9d%e3%82%81%e3%81%a6%e3%81%8b%e3%82%82.html)
[  跳ねたいサイトで跳ねたい
](https://zip358.com/2026/02/01/%e8%b7%b3%e3%81%ad%e3%81%9f%e3%81%84%e3%82%b5%e3%82%a4%e3%83%88%e3%81%a7%e8%b7%b3%e3%81%ad%e3%81%9f%e3%81%84.html)
[  映画、機動戦士ガンダム 閃光のハサウェイ キルケーの魔女
](https://zip358.com/2026/01/31/%e6%98%a0%e7%94%bb%e3%80%81%e6%a9%9f%e5%8b%95%e6%88%a6%e5%a3%ab%e3%82%ac%e3%83%b3%e3%83%80%e3%83%a0-%e9%96%83%e5%85%89%e3%81%ae%e3%83%8f%e3%82%b5%e3%82%a6%e3%82%a7%e3%82%a4-%e3%82%ad%e3%83%ab%e3%82%b1.html)