メモ

主にプログラミング系の備忘録

動画設定情報を取得するプログラム

YouTube APIのlist処理でとろうとしてたが、一部取れない項目があるらしいので力技で。
設定画面に遷移して情報を取得するので、動画の所有者以外はたぶん無理。

Public Sub getSettingVideo(sId As String)
  Dim ie As InternetExplorer
  Dim dom As HTMLDocument
  Dim el As IHTMLElement
  Dim n As Long
  Dim el2 As IHTMLElement
  Set ie = New InternetExplorer
  ie.Visible = True 'debug
  
  ie.navigate "https://www.youtube.com/edit?video_id=" & sId
  Call ieCheck(ie)
  
  Set dom = ie.document
  Debug.Print dom.getElementsByName("title")(0).Value 'タイトル
  For Each el In dom.getElementsByName("description") '説明。ヘッダでも使われてるので…。

    If el.tagName = "TEXTAREA" Then
      Debug.Print el.innerText
      Exit For
    End If
  Next el
  
  'タグ。これは設定されている数をカウントするようにしよう
  n = 0
  For Each el In dom.getElementsByTagName("span")
    If el.getAttribute("role") = "listitem" Then n = n + 1
    
  Next el
  Debug.Print n
  
  
  '公開設定
  For Each el In dom.getElementsByName("privacy")(0).getElementsByTagName("option")
    If el.getAttribute("selected") Then
      Debug.Print el.innerText
      Exit For
    End If
  
  Next el
  

  'コメントを許可 これ、ページ遷移なしでとれたらいいなぁ
  Debug.Print dom.getElementsByName("allow_comments")(0).Value
  
  '動画の評価をユーザに表示する
  Debug.Print dom.getElementsByName("allow_ratings")(0).Value
  '動画のライセンス
  For Each el In dom.getElementsByName("reuse")(0).getElementsByTagName("option")
    If el.getAttribute("selected") Then
      Debug.Print el.innerText
      Exit For
    End If
  Next el

  'シンジケーション
  For Each el In dom.getElementsByName("syndication")
    If el.getAttribute("checked") Then
      Debug.Print el.Value
      Exit For
    End If
  Next el

  '字幕の設定
  For Each el In dom.getElementById("captions_certificate_reason").getElementsByTagName("option")
    If el.getAttribute("selected") Then
      Debug.Print el.innerText
      Exit For
    End If
  Next el
  
  '埋め込みの可不可
  Debug.Print dom.getElementsByName("allow_embedding")(0).getAttribute("checked")
  'チャンネルを登録者に通知
  Debug.Print dom.getElementsByName("creator_share_feeds")(0).getAttribute("checked")
  '年齢制限
  Debug.Print dom.getElementsByName("self_racy")(0).getAttribute("checked")
    
  'カテゴリ
  For Each el In dom.getElementsByTagName("select")
    If el.getAttribute("data-ng-model") = "category" Then Exit For
  Next el
  
  For Each el2 In el.getElementsByTagName("option")
    If el2.getAttribute("selected") = "selected" Then
      Debug.Print el2.innerText
      Exit For
    End If
  Next el2

  '動画の撮影場所
  Debug.Print dom.getElementsByClassName("location-input")(0).Value
  
  '動画の言語はUIが良くわからないので後回し。
  
  '視聴者への翻訳依頼
  Debug.Print dom.getElementsByName("captions_crowdsource")(0).getAttribute("checked")

  '動画の統計情報
  Debug.Print dom.getElementsByName("allow_public_stats")(0).getAttribute("checked")

  '3D動画
  
  For Each el In dom.getElementsByTagName("input")
    If el.getAttribute("data-ng-model") = "threed.is_3d" Then
      Debug.Print el.getAttribute("checked")
      Exit For
    End If
  Next el

  
  'コンテンツに関する申告
  
  For Each el In dom.getElementsByTagName("input")
    If el.getAttribute("data-ng-model") = "product.has_paid_product_placement" Then
      Debug.Print el.getAttribute("checked")
      Exit For
    End If
  Next el
  
  ie.Quit
  


End Sub