import js
import urllib.parse
import json
from pyodide.http import pyfetch
from pyodide.ffi import create_proxy # イベントハンドラ用
async def searchCD(event=None):
input_test_element = js.document.getElementById("input_test")
input_word = input_test_element.value.strip()
input_test_element.value = ""
if not input_word:
js.document.getElementById("mes").innerText = "アーティスト名を入力してください。"
return
APP_ID = '1021810494159056409'
url = f'https://app.rakuten.co.jp/services/api/BooksCD/Search/20170404?artistName={urllib.parse.quote(input_word)}&sort=-releaseDate&applicationId={APP_ID}'
try:
response = await pyfetch(url) # open_url の代わりに pyfetch を使用
data = await response.json() # ここで JSON に変換
items = data.get("Items", [])
if not items:
js.document.getElementById("mes").innerText = "該当するアーティストがいません。"
return
for i in range(min(5, len(items))):
item = items[i]["Item"]
image_url = item.get("smallImageUrl", "")
title = item.get("title", "")
link = item.get("itemUrl", "")
if image_url and title and link:
js.document.getElementById(f"image{i}").src = image_url
link_element = js.document.getElementById(f"link{i}")
link_element.href = link
link_element.innerText = title
js.document.getElementById("restable").style.display = "block"
js.document.getElementById("mes").innerText = "検索完了!"
except Exception as e:
js.document.getElementById("mes").innerText = f"エラー: {str(e)}"
# ボタンのクリックイベントに対応
searchCD_proxy = create_proxy(searchCD)
js.document.getElementById("btn").addEventListener("click", searchCD_proxy)