TED - Welcome to TEDLabs

いつのまにかTEDのAPIが公開されていたので、少し触ってみる。

2017/09/01追記

TED APIのサービスは終了となりました。

昔は、APIが公開されてなかったので、スクレイピングで取得していた。 (htmlの構造が今は変わってるので、以下のコードでは取得できません)

TEDの英語原稿を取得する - ギークを夢見るじょーぶん男子

require 'rubygems'
require 'open-uri'
require 'json'
require 'nokogiri'

url = "http://www.ted.com/talks/brene_brown_listening_to_shame.html"
doc = Nokogiri::HTML(open(url))

ted_id = doc.xpath("//div[@id='share_and_save']").first.attribute("data-id")

open("http://www.ted.com/talks/subtitles/id/#{ted_id}/lang/en") do |f|
  json = JSON.parse(f.read)
  json['captions'].each do |j|
    puts j['content']
  end
end

TED APIを使い、以下のエンドポイント(言い方あってる?)を叩くと、結果がjsonで返ってくる。

https://api.ted.com/v1/talks.json?api-key=#{TED_API}&filter=slug:matt_cutts_try_something_new_for_30_day

この id が、動画の固有IDになる。すばらしい。

{"talks":
  [{"talk":
    {"id":1183,
     "event_id":64,
     "name":"Matt Cutts: Try something new for 30 days",
     "description":"Is there something you've always meant to do, wanted to do, but just ... haven't? Matt Cutts suggests: Try it for 30 days. This short, lighthearted talk offers a neat way to think about setting and achieving goals.",
     "slug":"matt_cutts_try_something_new_for_30_days",
     "native_language_code":"en",
     "published_at":"2011-07-01 15:14:00",
     "recorded_at":"2011-03-03 00:00:00",
     "updated_at":"2014-11-12 20:04:29",
     "released_at":"2014-11-12 20:04:29"}}],
    "counts":{"this":1,"total":1}
}

ドキュメント

メモ書き程度に書き散らかす。

TED I/O Docs

Events

TEDのイベントがあった箇所を取得する

{
    "event": {
        "id": 1,
        "name": "TED2008",
        "description": "",
        "header_text": "",
        "slug": "2008",
        "url": "",
        "starts_at": "2008-02-27 00:00:00"
    }
}

Ratings

ランキング?

Rating Words

投票するときの、表現?

{
    "rating_words": [{
        "rating_word": {
            "id": 1,
            "name": "Beautiful"
        }
    }, {
        "rating_word": {
            "id": 2,
            "name": "Confusing"
        }
    }, {
        "rating_word": {
            "id": 3,
            "name": "Courageous"
        }
    }, {
        "rating_word": {
            "id": 7,
            "name": "Funny"
        }
    }, {
        "rating_word": {
            "id": 8,
            "name": "Informative"
        }
    }, {
        "rating_word": {
            "id": 9,
            "name": "Ingenious"
        }
    }, {
        "rating_word": {
            "id": 10,
            "name": "Inspiring"
        }
    }, {
        "rating_word": {
            "id": 11,
            "name": "Longwinded"
        }
    }, {
        "rating_word": {
            "id": 21,
            "name": "Unconvincing"
        }
    }, {
        "rating_word": {
            "id": 22,
            "name": "Fascinating"
        }
    }, {
        "rating_word": {
            "id": 23,
            "name": "Jaw-dropping"
        }
    }, {
        "rating_word": {
            "id": 24,
            "name": "Persuasive"
        }
    }, {
        "rating_word": {
            "id": 25,
            "name": "OK"
        }
    }, {
        "rating_word": {
            "id": 26,
            "name": "Obnoxious"
        }
    }],
    "counts": {
        "this": 14,
        "total": 14
    }
}

Speakers

:id スピーカの固有ID

スピーカーの情報を得る

Talks

Themes

題名、テーマに関する取得

Playlists

プレイリスト関連の検索

Query

カテゴリと検索文字列を指定して検索結果を得る