2022-07-26 (Tue) [長年日記]

_ [srv]Youtube API の応答を中継したい

Youtube のコメントを見る Chrome 拡張を作ってみたが、もし公開するなら API鍵を拡張の中に含めないほうがいいらしいので、OpenWRT の Lua CGI で中継できるのかどうか試行してみた。

しかし、使おうと思った luci.httpclient が https の処理に nixio.tls を必要とするのに、OpenWRT の nixio は tls 抜きで作られており、うまくいかなかった。

とりあえず wget を呼ぶとかいうアホくさいことをして、動くことだけ確認したところでもうやめた。

 #!/usr/bin/lua
 local nixio = require("nixio")

 local host = nixio.getenv("HTTP_HOST") or ""
 if host ~= "example.com" then
  return
 end

 local method = nixio.getenv("REQUEST_METHOD") or ""
 if method ~= "GET" then
  return
 end

 local q = nixio.getenv("QUERY_STRING") or ""
 local vid = string.match(q, "^vid=([0-9A-Za-z_-]+)$")
 local vidlen = string.len(vid or "")

 if vidlen == 11 then
  local pipe = io.popen("wget -q -O - 'https://www.googleapis.com/youtube/v3/commentThreads?maxResults=10&order=relevance&part=snippet&textFormat=plaintext&key=XXXXX&videoId=" .. vid .. "'")
  local json = pipe:read("*a")
  local result = {pipe:close()}

  print("Access-Control-Allow-Origin: https://www.youtube.com\r")
  print("Content-Type: application/json; charset=UTF-8\r")
  print("\r")
  if result[1] and type(json) == "string" and json:len() > 1 then
   print(json)
  else
   print('{"items":[]}')
  end
 end

«前の日記(2022-06-20 (Mon)) 最新