🤖
「LLMを処理系として動かせる時代になった」の続き
LLMを処理系として動かせる時代になったの仕組みを使ってもう1つ。
立川の映画館 シネマシティの上演情報の取得と表示も、同じようにLLMに実行させるスクリプトが描けました。
#!/bin/zsh
# 引数チェック
if [ $# -ne 1 ]; then
echo "使用法: $0 {fetch|view|view_web}"
echo " fetch: シネマシティの映画情報を取得してSQLiteに保存"
echo " view: SQLiteに保存された映画情報を表示"
echo " view_web: ブラウザで映画情報を確認"
exit 1
fi
case "$1" in
"fetch")
claude --allowedTools "mcp__fetch__fetch,mcp__sqlite__create_table,mcp__sqlite__write_query,mcp__sqlite__read_query,mcp__sqlite__describe_table,mcp__sqlite__list_tables" -p "~/bin/cinemacity_movies.shのコメント部分を読み取って、fetch処理を実行してください"
;;
"view")
claude --allowedTools "mcp__sqlite__read_query,mcp__sqlite__list_tables,mcp__sqlite__describe_table" -p "~/bin/cinemacity_movies.shのコメント部分を読み取って、view処理を実行してください"
;;
"view_web")
claude --allowedTools "mcp__sqlite__read_query,mcp__sqlite__list_tables,mcp__sqlite__describe_table,mcp__filesystem__write_file,mcp__filesystem__create_directory" -p "~/bin/cinemacity_movies.shのコメント部分を読み取って、view_web処理を実行してください"
;;
*)
echo "エラー: 無効な引数です。'fetch', 'view', または 'view_web' を指定してください。"
exit 1
;;
esac
: '
ここから、LLMに対する指示です。
# シネマシティ映画情報管理プロンプト
## fetch処理
必要な権限: mcp__fetch__fetch, mcp__sqlite__create_table, mcp__sqlite__write_query, mcp__sqlite__read_query, mcp__sqlite__describe_table, mcp__sqlite__list_tables
以下のステップを実行して、シネマシティの映画情報を取得してSQLiteに保存します:
1. https://cinemacity.co.jp/ を読み取り(mcp__fetch__fetch使用)
2. https://res.cinemacity.co.jp/TicketReserver/showing から上映映画一覧を取得(mcp__fetch__fetch使用、raw=trueで取得)
3. 各映画の詳細ページ(https://res.cinemacity.co.jp/TicketReserver/studio/movie/{ID})から詳細情報を取得(mcp__fetch__fetch使用)
4. SQLiteテーブル存在確認(mcp__sqlite__list_tables使用)、`cinemacity_movies` が存在しない場合は作成(mcp__sqlite__create_table使用):
- movie_id (INTEGER PRIMARY KEY)
- title (TEXT NOT NULL)
- description (TEXT)
- screening_period (TEXT)
- screening_notes (TEXT)
- audio_format (TEXT)
- video_format (TEXT)
- studio_restrictions (TEXT)
- special_events (TEXT)
- copyright_info (TEXT)
- official_website (TEXT)
- poster_url (TEXT)
- fetched_at (DATETIME DEFAULT CURRENT_TIMESTAMP)
5. 取得した映画情報をSQLiteテーブルに挿入(mcp__sqlite__write_query使用、INSERT OR REPLACEで更新・挿入)
6. すでに存在する映画は更新し、新規映画は挿入する
7. 2.の一覧全てが処理できたら終了する
## view処理
必要な権限: mcp__sqlite__read_query, mcp__sqlite__list_tables, mcp__sqlite__describe_table
以下のクエリを実行して映画情報を表示します:
1. テーブル存在確認(mcp__sqlite__list_tables使用)
2. テーブル構造確認(mcp__sqlite__describe_table使用)
3. `SELECT movie_id, title, screening_period, video_format, audio_format FROM cinemacity_movies ORDER BY movie_id` で基本情報を表示(mcp__sqlite__read_query使用)
4. 限定上映作品がある場合は期間も含めて表示
5. 特殊フォーマット(4K、7.1ch等)がある場合は併記
## view_web処理
必要な権限: mcp__sqlite__read_query, mcp__sqlite__list_tables, mcp__sqlite__describe_table, mcp__filesystem__write_file, mcp__filesystem__create_directory
以下の手順でブラウザ表示用のHTMLファイルを作成します:
1. テーブル存在確認(mcp__sqlite__list_tables使用)
2. SQLiteから全映画情報を取得(mcp__sqlite__read_query使用、SELECT * FROM cinemacity_movies ORDER BY movie_id)
3. ~/tmp/ディレクトリが存在しない場合は作成(mcp__filesystem__create_directory使用)
4. 映画情報を整理したHTMLファイルを~/tmp/cinemacity_movies_YYYYMMDD_HHMMSS.htmlとして作成(mcp__filesystem__write_file使用)
5. 作成したHTMLファイルのパスを表示してブラウザで開けるように案内
## 表示形式例
シネマシティ上映映画一覧:
1. はじまりのうた (ID: 1926) [極上音響上映]
期間: 2025年6月13日(金)-6月26日(木) 2週間限定
2. 機動戦士Gundam GQuuuuuuX -Beginning- (ID: 3322)
期間: 2025年6月20日(金)-7月3日(木) 2週間限定
3. Mr.ノボカイン (ID: 3400) [4K]
...
'
view_webでは、いい感じのHTMLを作ってくれます。
プロンプトは100行程度なのです。
でもLLMが知っている知識に乗っかることで、今までのプログラムの100行程度とは比較にならないぐらい、結構な事をやってくれています。
動作が遅いや、挙動が不安定になる箇所は多々あるでしょう。
けど、自分は今とてもワクワクしています。
Discussion