松岡修造APIを作る
モチベーション
配信で頑張れ!チャンネルポイントがほしいなぁ
どうせなら暑苦しいのがほしい
Youtubeの松岡修造動画をランダムで配信したい FirebotはJavaScriptを実行できるのでFirebot上でやってしまってもいいのだが、マイクロサービス化することで汎用性持たせたほうが色々と取り回ししやすくてよいと感じる
仕組み
リクエストに対しては保持したリストから返す
何を返すか
url, 動画id, タイトル, 概要, 再生時間, ...etc
普通にYoutubeのレスポンスをそのまま返したほうがわかりやすい
$ npm create hono@latest
google cloudでプロジェクト作成 & アクセストークン生成
使うのはAPIキー
松岡修造公式チャンネルのchannelId: UCix3CP_r1-t3GMymVnyskpw
HonoのAPIの叩き方
fetchとrequestの違い
fetch
app.fetch will be entry point of your application.
request
request is a useful method for testing.
You can pass a URL or pathname to send a GET request. app will return a Response object.
code:response.json
{
"video":{
"kind":"youtube#searchResult",
"etag":"TA0WNvyCeahpiayZkj-mBPdUS9M",
"id":{
"kind":"youtube#video",
"videoId":"SjwJqJrq6dA"
},
"snippet":{
"publishedAt":"2019-03-22T03:40:49Z",
"channelId":"UCix3CP_r1-t3GMymVnyskpw",
"title":"誰も守ってくれないと思っているあなたに",
"description":"シーサー見てみろよ.",
"thumbnails":{
"default":{
"width":120,
"height":90
},
"medium":{
"width":320,
"height":180
},
"high":{
"width":480,
"height":360
}
},
"channelTitle":"松岡修造公式Youtubeチャンネル",
"liveBroadcastContent":"none",
"publishTime":"2019-03-22T03:40:49Z"
}
}
}
できた
色々ハマったところ
Honoインスタンスにわたす必要があるのでutil.ts側で定義しても意味なかった。当たり前
code:index.ts
type AppContext = {
Bindings: {
VIDEOS: KVNamespace;
API_KEY: string;
}
}
const app = new Hono<AppContext>().basePath('/api');
secretの登録をローカルで反映させる方法がよくわからなかった
ローカルでも使えるみたいな書き方を見たけど.dev.varsから読み込むのが正しいのかな?
KVnamespaceのidはprivateではないのでgithubにあげてOK