データ取得

番組・エピソード・ユーザーの基本情報はGraphQLのQueryで取得できます。公開コンテンツの取得にはAPIトークンは不要ですが、meや自分のプレイリストなど、利用者固有の情報には認証が必要です。

番組とエピソード

IDを指定して番組と公開済みエピソードを取得します。ページネーションを行うフィールドでは、firstに1ページの件数、pageにページ番号を指定します。

query Podcast($podcastId: String!, $page: Int = 1) {
  podcast(id: $podcastId) {
    id
    title
    description
    imageUrl300
    hostedByListen
    episodes(status: PUBLISHED, sort: NEWEST, first: 20, page: $page) {
      data {
        id
        title
        pubDate
        duration
        webviewUrl
      }
      paginatorInfo {
        currentPage
        hasMorePages
      }
    }
  }
}

エピソードを直接取得する場合はepisode(id:)を使います。音声・ビデオのURLや変換状態はmediaVersionsを型ごとのフラグメントで取得できます。

query Episode($episodeId: String!) {
  episode(id: $episodeId) {
    id
    title
    description
    pubDate
    podcast { id title }
    mediaVersions {
      ... on AudioVersion {
        fileUrl
        format
      }
      ... on VideoVersion {
        fileUrl
        format
        status
        thumbnailUrl
      }
    }
  }
}

非公開・限定公開・有料・フォロワー限定のコンテンツは、閲覧権限がある利用者として認証した場合だけ取得できます。

検索

番組はsearchPodcasts、エピソードはsearchEpisodesで検索できます。searchEpisodessemantic: trueは意味を考慮したハイブリッド検索、podcastIdは番組内検索です。

query SearchEpisodes($query: String!, $page: Int = 1) {
  searchEpisodes(query: $query, semantic: false, first: 20, page: $page) {
    data {
      id
      title
      pubDate
      searchSnippet
      podcast { id title }
    }
    paginatorInfo {
      currentPage
      hasMorePages
    }
  }
}

よく使うQuery

Query 用途 認証
me ログイン中の利用者、所有番組、プレイリストなど 必須
user(id:) 公開ユーザー情報 不要
podcast(id:) 番組と配信エピソード コンテンツによる
episode(id:) / episodes(ids:) 1件または複数のエピソード コンテンツによる
searchPodcasts(query:) 番組検索 不要
searchEpisodes(query:) エピソード全文検索 不要
categories / category(id:) カテゴリ一覧・詳細 不要
modelByUrl(url:) LISTENのURLから対象データを取得 不要

利用できるフィールドはGraphQLのイントロスペクションでも確認できます。必要なフィールドだけを選択してリクエストしてください。