かつて美人時計と言うウェブアプリがありました。街でスカウトしてきた女性が1分に1枚ずつ交代していくと言う。一人1分で 60人。24時間で、1,440人の美人が1日に登場する時計でした。
企画もアイディアも面白いんですが、手間がかかりますね。
そこで思ったのですが、Instagramで見ている画像で時計が作れればなぁと思いました。取り急ぎ24枚URLがあると1時間ずつになりますね。
こういうアイディアをInstagramの派生で提供してくれると、もっとInstagramが常駐して滞在時間に貢献してくれると思います。
いつも癒してくれる
https://www.instagram.com/hanaonlyf/
ちゃんへのリスペクトもふくめ♥
インスタグラムでかつての 美人時計 を作りたい!
権利関係をふくめてどんなアプリになるのか?
ChatGPT-5です。
インスタグラムのお気に入りを24 URLを集めて、 インスタ時計というアプリを作りたいです。 1時間に1枚づつ表示していく時計です。 デジタル時計のバリエーションは5つくらいから選べるようにして、ブラウザで開きっぱなしにできる壁紙兼ねる時計のようなもの。 URLを24個貼り付けると、ローカルで動く。もしくは、シェアできるようにもなるとよいです。
機能要件
1. 画像表示
• Instagram の投稿 URL(または画像直リンク)を 24 個入力可能
• 1 時間ごとに自動で次の画像に切り替える
(例:00:00 → 画像1、01:00 → 画像2 … 23:00 → 画像24)
• ブラウザを開きっぱなしで表示可能
2. 時計表示
• デジタル時計(5 種類のテーマ切り替え)
• 12 時間/24 時間表示の切り替え
3. 設定管理
• 入力した URL を ローカルストレージに保存(再読み込みしても維持)
• エクスポート/インポートで他ユーザーと設定共有可能
4. 動作モード
• ローカル HTML ファイルとして動作(インターネット接続不要)
• オプションで Web 公開(GitHub Pages など)
UI案
1. 設定画面
• 24 個のテキストボックスに URL を入力
• 「テーマ選択」ドロップダウン
• 保存ボタン/エクスポート/インポート
2. 表示画面
• 背景に画像
• 右下または中央にデジタル時計
• 時計テーマ変更可能
懸念点
• InstagramのURLが「埋め込み可能画像直リンク」でない場合、CORSやログイン制限で表示できない可能性がある
→ 安定動作には、事前に画像をダウンロードし、ローカルまたはCDNに置く方が確実
• 公開時はInstagramの利用規約に準拠する必要あり(特に他人の画像の場合)
⸻
このアプリの試作版をHTML+JSで作成すれば、MacやWindowsで直接開いて動きます。
もしご希望であれば、24URL入力→時計付きスライドショー表示のベースコードをこちらで組みます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>インスタ時計</title> <style> body { margin: 0; height: 100vh; background: black; color: white; display: flex; flex-direction: column; align-items: center; justify-content: center; background-size: cover; background-position: center; transition: background-image 1s ease; font-family: sans-serif; } .clock { font-size: 4em; text-shadow: 2px 2px 5px rgba(0,0,0,0.7); } .settings { position: fixed; top: 10px; left: 10px; background: rgba(0,0,0,0.8); padding: 10px; max-height: 90vh; overflow-y: auto; } .settings input { width: 300px; margin-bottom: 5px; } .theme1 .clock { color: white; } .theme2 .clock { color: yellow; font-family: monospace; } .theme3 .clock { color: cyan; text-shadow: 0 0 10px cyan; } .theme4 .clock { color: lime; font-weight: bold; } .theme5 .clock { color: pink; font-style: italic; } </style> </head> <body class="theme1"> <div class="clock" id="clock">00:00</div> <div class="settings" id="settings"> <h3>URL設定(24時間分)</h3> <div id="urlInputs"></div> <label>テーマ: <select id="themeSelect"> <option value="theme1">テーマ1</option> <option value="theme2">テーマ2</option> <option value="theme3">テーマ3</option> <option value="theme4">テーマ4</option> <option value="theme5">テーマ5</option> </select> </label><br><br> <button id="saveBtn">保存</button> </div> <script> const urlInputsContainer = document.getElementById('urlInputs'); for (let i=0; i<24; i++) { const input = document.createElement('input'); input.type = 'text'; input.placeholder = `${i}時の画像URL`; input.id = `url${i}`; urlInputsContainer.appendChild(input); urlInputsContainer.appendChild(document.createElement('br')); } function loadSettings() { const saved = JSON.parse(localStorage.getItem('instaClock') || '{}'); for (let i=0; i<24; i++) { document.getElementById(`url${i}`).value = saved[`url${i}`] || ''; } document.getElementById('themeSelect').value = saved.theme || 'theme1'; document.body.className = saved.theme || 'theme1'; } function saveSettings() { const data = {}; for (let i=0; i<24; i++) { data[`url${i}`] = document.getElementById(`url${i}`).value.trim(); } data.theme = document.getElementById('themeSelect').value; localStorage.setItem('instaClock', JSON.stringify(data)); document.body.className = data.theme; } function updateClockAndImage() { const now = new Date(); const hh = String(now.getHours()).padStart(2,'0'); const mm = String(now.getMinutes()).padStart(2,'0'); document.getElementById('clock').textContent = `${hh}:${mm}`; const saved = JSON.parse(localStorage.getItem('instaClock') || '{}'); const imgUrl = saved[`url${now.getHours()}`]; if (imgUrl) { document.body.style.backgroundImage = `url('${imgUrl}')`; } else { document.body.style.backgroundImage = ''; } } document.getElementById('saveBtn').addEventListener('click', saveSettings); document.getElementById('themeSelect').addEventListener('change', saveSettings); loadSettings(); updateClockAndImage(); setInterval(updateClockAndImage, 1000 * 60); // 1分ごと更新 </script> </body> </html>
実装はHTMLのみ
00:00
URL設定(24時間分)
バイブコーディングでトライしましたが、
おそらくCORS制限でうまくいきませんでした。
CORS制限とは Cross-Origin Resource Sharing(クロスオリジンリソース共有)制限 のことです。ブラウザがセキュリティ上設けている仕組みで、あるウェブページから別のドメインのリソースに勝手にアクセスすることを制限します。