ted_api 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +56 -0
  5. data/Rakefile +8 -0
  6. data/lib/faraday/response/raise_ted_api_error.rb +43 -0
  7. data/lib/ted_api.rb +20 -0
  8. data/lib/ted_api/client.rb +39 -0
  9. data/lib/ted_api/client/countries.rb +18 -0
  10. data/lib/ted_api/client/events.rb +18 -0
  11. data/lib/ted_api/client/languages.rb +18 -0
  12. data/lib/ted_api/client/quotes.rb +18 -0
  13. data/lib/ted_api/client/rating_words.rb +18 -0
  14. data/lib/ted_api/client/speakers.rb +18 -0
  15. data/lib/ted_api/client/tags.rb +18 -0
  16. data/lib/ted_api/client/talks.rb +26 -0
  17. data/lib/ted_api/client/themes.rb +18 -0
  18. data/lib/ted_api/configuration.rb +54 -0
  19. data/lib/ted_api/connection.rb +30 -0
  20. data/lib/ted_api/error.rb +34 -0
  21. data/lib/ted_api/request.rb +34 -0
  22. data/lib/ted_api/version.rb +3 -0
  23. data/spec/faraday/response_spec.rb +35 -0
  24. data/spec/fixtures/countries.json +1 -0
  25. data/spec/fixtures/countries.xml +109 -0
  26. data/spec/fixtures/country.json +1 -0
  27. data/spec/fixtures/country.xml +8 -0
  28. data/spec/fixtures/event.json +1 -0
  29. data/spec/fixtures/event.xml +12 -0
  30. data/spec/fixtures/events.json +1 -0
  31. data/spec/fixtures/events.xml +189 -0
  32. data/spec/fixtures/language.json +1 -0
  33. data/spec/fixtures/language.xml +8 -0
  34. data/spec/fixtures/languages.json +1 -0
  35. data/spec/fixtures/languages.xml +106 -0
  36. data/spec/fixtures/quote.json +1 -0
  37. data/spec/fixtures/quote.xml +14 -0
  38. data/spec/fixtures/quotes.json +2 -0
  39. data/spec/fixtures/quotes.xml +230 -0
  40. data/spec/fixtures/rating_word.json +1 -0
  41. data/spec/fixtures/rating_word.xml +7 -0
  42. data/spec/fixtures/rating_words.json +1 -0
  43. data/spec/fixtures/rating_words.xml +65 -0
  44. data/spec/fixtures/speaker.json +1 -0
  45. data/spec/fixtures/speaker.xml +16 -0
  46. data/spec/fixtures/speakers.json +1 -0
  47. data/spec/fixtures/speakers.xml +269 -0
  48. data/spec/fixtures/speakers_by_talk.json +1 -0
  49. data/spec/fixtures/subtitles.json +2 -0
  50. data/spec/fixtures/tag.json +1 -0
  51. data/spec/fixtures/tag.xml +11 -0
  52. data/spec/fixtures/tags.json +1 -0
  53. data/spec/fixtures/tags.xml +169 -0
  54. data/spec/fixtures/talk.json +1 -0
  55. data/spec/fixtures/talk.xml +302 -0
  56. data/spec/fixtures/talks.json +1 -0
  57. data/spec/fixtures/talks.xml +249 -0
  58. data/spec/fixtures/theme.json +1 -0
  59. data/spec/fixtures/theme.xml +19 -0
  60. data/spec/fixtures/themes.json +1 -0
  61. data/spec/fixtures/themes.xml +294 -0
  62. data/spec/spec_helper.rb +38 -0
  63. data/spec/ted_api/client/countries_spec.rb +46 -0
  64. data/spec/ted_api/client/events_spec.rb +46 -0
  65. data/spec/ted_api/client/languages_spec.rb +46 -0
  66. data/spec/ted_api/client/quotes_spec.rb +46 -0
  67. data/spec/ted_api/client/rating_words_spec.rb +46 -0
  68. data/spec/ted_api/client/speakers_spec.rb +46 -0
  69. data/spec/ted_api/client/tags_spec.rb +46 -0
  70. data/spec/ted_api/client/talks_spec.rb +78 -0
  71. data/spec/ted_api/client/themes_spec.rb +46 -0
  72. data/spec/ted_api/client_spec.rb +26 -0
  73. data/spec/ted_api_spec.rb +21 -0
  74. data/ted_api.gemspec +33 -0
  75. metadata +347 -0
@@ -0,0 +1,30 @@
1
+ require 'faraday_middleware'
2
+ require 'faraday/response/raise_ted_api_error'
3
+
4
+ module TedApi
5
+ module Connection
6
+ private
7
+
8
+ def connection(raw=false, force_urlencoded=false)
9
+ url = "#{TedApi.api_endpoint}#{TedApi.api_version}"
10
+
11
+ options = {
12
+ url: url
13
+ }
14
+
15
+ connection = Faraday.new(options) do |builder|
16
+ builder.use Faraday::Response::RaiseTedApiError
17
+ unless raw
18
+ builder.use FaradayMiddleware::Mashify
19
+ if response_format == 'json'
20
+ builder.use FaradayMiddleware::ParseJson
21
+ elsif response_format == 'xml'
22
+ builder.use FaradayMiddleware::ParseXml
23
+ end
24
+ end
25
+ builder.adapter *adapter
26
+ end
27
+ connection
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,34 @@
1
+ module TedApi
2
+ # Custom error class for rescuing from all Ted errors
3
+ class Error < StandardError; end
4
+
5
+ # Raised when Ted returns a 400 HTTP status code
6
+ class BadRequest < Error; end
7
+
8
+ # Raised when Ted returns a 401 HTTP status code
9
+ class Unauthorized < Error; end
10
+
11
+ # Raised when Ted returns a 403 HTTP status code
12
+ class Forbidden < Error; end
13
+
14
+ # Raised when Ted returns a 404 HTTP status code
15
+ class NotFound < Error; end
16
+
17
+ # Raised when Ted returns a 406 HTTP status code
18
+ class NotAcceptable < Error; end
19
+
20
+ # Raised when Ted returns a 422 HTTP status code
21
+ class UnprocessableEntity < Error; end
22
+
23
+ # Raised when Ted returns a 500 HTTP status code
24
+ class InternalServerError < Error; end
25
+
26
+ # Raised when Ted returns a 501 HTTP status code
27
+ class NotImplemented < Error; end
28
+
29
+ # Raised when Ted returns a 502 HTTP status code
30
+ class BadGateway < Error; end
31
+
32
+ # Raised when Ted returns a 503 HTTP status code
33
+ class ServiceUnavailable < Error; end
34
+ end
@@ -0,0 +1,34 @@
1
+ require 'multi_json'
2
+ require 'multi_xml'
3
+
4
+ module TedApi
5
+ module Request
6
+ def get(path, options={}, raw=false, force_urlencoded=false)
7
+ request(:get, path, options, raw, force_urlencoded)
8
+ end
9
+
10
+ private
11
+
12
+ def request(method, path, options, raw, force_urlencoded)
13
+ response = connection(raw, force_urlencoded).send(method) do |request|
14
+ # puts '>>>>>>>>>>>>>>>>>>'
15
+ path = "#{path}.#{response_format}"
16
+ options.merge!('api-key' => api_key)
17
+ # puts "path: #{path}"
18
+ # puts "options: #{options}"
19
+ request.url(path, options)
20
+ end
21
+
22
+ if raw
23
+ response
24
+ else
25
+ if response_format == 'json'
26
+ response.body
27
+ elsif response_format == 'xml'
28
+ response.body.response
29
+ end
30
+ end
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module TedApi
2
+ VERSION = '0.1'
3
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe Faraday::Response do
5
+ before do
6
+ @client = TedApi::Client.new(api_key: 'foo')
7
+ end
8
+
9
+ {
10
+ 400 => TedApi::BadRequest,
11
+ 401 => TedApi::Unauthorized,
12
+ 403 => TedApi::Forbidden,
13
+ 404 => TedApi::NotFound,
14
+ 406 => TedApi::NotAcceptable,
15
+ 422 => TedApi::UnprocessableEntity,
16
+ 500 => TedApi::InternalServerError,
17
+ 501 => TedApi::NotImplemented,
18
+ 502 => TedApi::BadGateway,
19
+ 503 => TedApi::ServiceUnavailable,
20
+ }.each do |status, exception|
21
+ context "when HTTP status is #{status}" do
22
+
23
+ before do
24
+ stub_get('talks.json?api-key=foo').
25
+ to_return(:status => status)
26
+ end
27
+
28
+ it "should raise #{exception.name} error" do
29
+ lambda do
30
+ @client.talks
31
+ end.should raise_error(exception)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1 @@
1
+ {"states":[{"state":{"id":1,"name":"Afghanistan","code":"AF"}},{"state":{"id":2,"name":"Netherlands","code":"NL"}},{"state":{"id":3,"name":"Netherlands Antilles","code":"AN"}},{"state":{"id":4,"name":"Albania","code":"AL"}},{"state":{"id":5,"name":"Algeria","code":"DZ"}},{"state":{"id":6,"name":"American Samoa","code":"AS"}},{"state":{"id":7,"name":"Andorra","code":"AD"}},{"state":{"id":8,"name":"Angola","code":"AO"}},{"state":{"id":9,"name":"Anguilla","code":"AI"}},{"state":{"id":10,"name":"Antigua and Barbuda","code":"AG"}},{"state":{"id":11,"name":"United Arab Emirates","code":"AE"}},{"state":{"id":12,"name":"Argentina","code":"AR"}},{"state":{"id":13,"name":"Armenia","code":"AM"}},{"state":{"id":14,"name":"Aruba","code":"AW"}},{"state":{"id":15,"name":"Australia","code":"AU"}},{"state":{"id":16,"name":"Azerbaijan","code":"AZ"}},{"state":{"id":17,"name":"Bahamas","code":"BS"}},{"state":{"id":18,"name":"Bahrain","code":"BH"}},{"state":{"id":19,"name":"Bangladesh","code":"BD"}},{"state":{"id":20,"name":"Barbados","code":"BB"}}],"counts":{"this":20,"total":248}}
@@ -0,0 +1,109 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <response>
3
+ <states>
4
+ <state>
5
+ <id>1</id>
6
+ <name>Afghanistan</name>
7
+ <code>AF</code>
8
+ </state>
9
+ <state>
10
+ <id>2</id>
11
+ <name>Netherlands</name>
12
+ <code>NL</code>
13
+ </state>
14
+ <state>
15
+ <id>3</id>
16
+ <name>Netherlands Antilles</name>
17
+ <code>AN</code>
18
+ </state>
19
+ <state>
20
+ <id>4</id>
21
+ <name>Albania</name>
22
+ <code>AL</code>
23
+ </state>
24
+ <state>
25
+ <id>5</id>
26
+ <name>Algeria</name>
27
+ <code>DZ</code>
28
+ </state>
29
+ <state>
30
+ <id>6</id>
31
+ <name>American Samoa</name>
32
+ <code>AS</code>
33
+ </state>
34
+ <state>
35
+ <id>7</id>
36
+ <name>Andorra</name>
37
+ <code>AD</code>
38
+ </state>
39
+ <state>
40
+ <id>8</id>
41
+ <name>Angola</name>
42
+ <code>AO</code>
43
+ </state>
44
+ <state>
45
+ <id>9</id>
46
+ <name>Anguilla</name>
47
+ <code>AI</code>
48
+ </state>
49
+ <state>
50
+ <id>10</id>
51
+ <name>Antigua and Barbuda</name>
52
+ <code>AG</code>
53
+ </state>
54
+ <state>
55
+ <id>11</id>
56
+ <name>United Arab Emirates</name>
57
+ <code>AE</code>
58
+ </state>
59
+ <state>
60
+ <id>12</id>
61
+ <name>Argentina</name>
62
+ <code>AR</code>
63
+ </state>
64
+ <state>
65
+ <id>13</id>
66
+ <name>Armenia</name>
67
+ <code>AM</code>
68
+ </state>
69
+ <state>
70
+ <id>14</id>
71
+ <name>Aruba</name>
72
+ <code>AW</code>
73
+ </state>
74
+ <state>
75
+ <id>15</id>
76
+ <name>Australia</name>
77
+ <code>AU</code>
78
+ </state>
79
+ <state>
80
+ <id>16</id>
81
+ <name>Azerbaijan</name>
82
+ <code>AZ</code>
83
+ </state>
84
+ <state>
85
+ <id>17</id>
86
+ <name>Bahamas</name>
87
+ <code>BS</code>
88
+ </state>
89
+ <state>
90
+ <id>18</id>
91
+ <name>Bahrain</name>
92
+ <code>BH</code>
93
+ </state>
94
+ <state>
95
+ <id>19</id>
96
+ <name>Bangladesh</name>
97
+ <code>BD</code>
98
+ </state>
99
+ <state>
100
+ <id>20</id>
101
+ <name>Barbados</name>
102
+ <code>BB</code>
103
+ </state>
104
+ </states>
105
+ <counts>
106
+ <this>20</this>
107
+ <total>248</total>
108
+ </counts>
109
+ </response>
@@ -0,0 +1 @@
1
+ {"state":{"id":1,"name":"Afghanistan","code":"AF"}}
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <response>
3
+ <state>
4
+ <id>1</id>
5
+ <name>Afghanistan</name>
6
+ <code>AF</code>
7
+ </state>
8
+ </response>
@@ -0,0 +1 @@
1
+ {"event":{"id":1,"name":"TED2008","description":"","header_text":"","slug":"2008","url":"","starts_at":"2008-02-27 00:00:00"}}
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <response>
3
+ <event>
4
+ <id>1</id>
5
+ <name>TED2008</name>
6
+ <description></description>
7
+ <header_text></header_text>
8
+ <slug>2008</slug>
9
+ <url></url>
10
+ <starts_at>2008-02-27 00:00:00</starts_at>
11
+ </event>
12
+ </response>
@@ -0,0 +1 @@
1
+ {"events":[{"event":{"id":1,"name":"TED2008","description":"","header_text":"","slug":"2008","url":"","starts_at":"2008-02-27 00:00:00"}},{"event":{"id":2,"name":"TED2007","description":"","header_text":"","slug":"2007","url":"","starts_at":"2007-03-07 00:00:00"}},{"event":{"id":3,"name":"TED2006","description":"","header_text":"","slug":"2006","url":"","starts_at":"2006-02-22 00:00:00"}},{"event":{"id":4,"name":"TED2005","description":"","header_text":"","slug":"2005","url":"","starts_at":"2005-02-23 00:00:00"}},{"event":{"id":5,"name":"TED2004","description":"","header_text":"","slug":"2004","url":"","starts_at":"2004-02-25 00:00:00"}},{"event":{"id":6,"name":"TED2003","description":"","header_text":"","slug":"2003","url":"","starts_at":"2003-05-13 00:00:00"}},{"event":{"id":7,"name":"TED2002","description":"","header_text":"","slug":"2002","url":"","starts_at":"2002-02-20 00:00:00"}},{"event":{"id":8,"name":"TEDGlobal 2005","description":"","header_text":"","slug":"tg2005","url":"","starts_at":"2005-07-12 00:00:00"}},{"event":{"id":9,"name":"TEDSalon 2006","description":"","header_text":"","slug":"tedsalon2006","url":"","starts_at":"2006-12-14 00:00:00"}},{"event":{"id":10,"name":"TEDGlobal 2007","description":"","header_text":"","slug":"tg2007","url":"","starts_at":"2007-06-04 00:00:00"}},{"event":{"id":12,"name":"DLD 2007","description":"","header_text":"DLD (Digital Life Design), held annually in Munich, covers digital innovation, media and design. <a href=\"http:\/\/www.dld-conference.com\/\" target=\"_blank\">Learn more &gt;&gt;<\/a>","slug":"dld_2007","url":"http:\/\/www.dld-conference.com\/","starts_at":"2009-12-23 17:16:00"}},{"event":{"id":13,"name":"LIFT 2007","description":"","header_text":"The LIFT Conference, held in Geneva, explores the impact of technology on society.&nbsp;<a href=\"http:\/\/www.liftconference.com\/\" target=\"_blank\">Learn more &gt;&gt;<\/a> ","slug":"lift_2007","url":"http:\/\/www.liftconference.com\/","starts_at":"2009-12-23 16:46:00"}},{"event":{"id":14,"name":"Skoll World Forum 2007","description":"","header_text":"The Skoll World Forum on Social Entrepreneurship is the premier, international platform for accelerating entrepreneurial approaches and innovative solutions to the world&rsquo;s most pressing social issues. <a href=\"http:\/\/skollworldforum.org\/\">Learn more &raquo;<\/a>","slug":"skoll_2007","url":"http:\/\/skollworldforum.org\/","starts_at":"2007-03-27 01:00:00"}},{"event":{"id":15,"name":"TEDSalon 2007 Hot Science","description":"","header_text":"","slug":"tedsalon2007","url":"","starts_at":"2007-09-26 00:00:00"}},{"event":{"id":17,"name":"TED2001","description":"","header_text":"","slug":"2001","url":"","starts_at":"2001-02-02 00:00:00"}},{"event":{"id":18,"name":"TED2009","description":"TED2009","header_text":null,"slug":"2009","url":null,"starts_at":"2009-02-03 00:01:00"}},{"event":{"id":19,"name":"TED1984","description":"","header_text":"","slug":"1984","url":"","starts_at":"1984-03-03 16:45:00"}},{"event":{"id":20,"name":"TED1990","description":"","header_text":"","slug":"1990","url":"","starts_at":"1990-03-03 16:48:00"}},{"event":{"id":22,"name":"TED2000","description":"","header_text":"","slug":"2000","url":"","starts_at":"2000-02-23 00:00:00"}},{"event":{"id":23,"name":"TED1999","description":"","header_text":"","slug":"1999","url":"","starts_at":"1999-02-17 00:00:00"}}],"counts":{"this":20,"total":211}}
@@ -0,0 +1,189 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <response>
3
+ <events>
4
+ <event>
5
+ <id>1</id>
6
+ <name>TED2008</name>
7
+ <description></description>
8
+ <header_text></header_text>
9
+ <slug>2008</slug>
10
+ <url></url>
11
+ <starts_at>2008-02-27 00:00:00</starts_at>
12
+ </event>
13
+ <event>
14
+ <id>2</id>
15
+ <name>TED2007</name>
16
+ <description></description>
17
+ <header_text></header_text>
18
+ <slug>2007</slug>
19
+ <url></url>
20
+ <starts_at>2007-03-07 00:00:00</starts_at>
21
+ </event>
22
+ <event>
23
+ <id>3</id>
24
+ <name>TED2006</name>
25
+ <description></description>
26
+ <header_text></header_text>
27
+ <slug>2006</slug>
28
+ <url></url>
29
+ <starts_at>2006-02-22 00:00:00</starts_at>
30
+ </event>
31
+ <event>
32
+ <id>4</id>
33
+ <name>TED2005</name>
34
+ <description></description>
35
+ <header_text></header_text>
36
+ <slug>2005</slug>
37
+ <url></url>
38
+ <starts_at>2005-02-23 00:00:00</starts_at>
39
+ </event>
40
+ <event>
41
+ <id>5</id>
42
+ <name>TED2004</name>
43
+ <description></description>
44
+ <header_text></header_text>
45
+ <slug>2004</slug>
46
+ <url></url>
47
+ <starts_at>2004-02-25 00:00:00</starts_at>
48
+ </event>
49
+ <event>
50
+ <id>6</id>
51
+ <name>TED2003</name>
52
+ <description></description>
53
+ <header_text></header_text>
54
+ <slug>2003</slug>
55
+ <url></url>
56
+ <starts_at>2003-05-13 00:00:00</starts_at>
57
+ </event>
58
+ <event>
59
+ <id>7</id>
60
+ <name>TED2002</name>
61
+ <description></description>
62
+ <header_text></header_text>
63
+ <slug>2002</slug>
64
+ <url></url>
65
+ <starts_at>2002-02-20 00:00:00</starts_at>
66
+ </event>
67
+ <event>
68
+ <id>8</id>
69
+ <name>TEDGlobal 2005</name>
70
+ <description></description>
71
+ <header_text></header_text>
72
+ <slug>tg2005</slug>
73
+ <url></url>
74
+ <starts_at>2005-07-12 00:00:00</starts_at>
75
+ </event>
76
+ <event>
77
+ <id>9</id>
78
+ <name>TEDSalon 2006</name>
79
+ <description></description>
80
+ <header_text></header_text>
81
+ <slug>tedsalon2006</slug>
82
+ <url></url>
83
+ <starts_at>2006-12-14 00:00:00</starts_at>
84
+ </event>
85
+ <event>
86
+ <id>10</id>
87
+ <name>TEDGlobal 2007</name>
88
+ <description></description>
89
+ <header_text></header_text>
90
+ <slug>tg2007</slug>
91
+ <url></url>
92
+ <starts_at>2007-06-04 00:00:00</starts_at>
93
+ </event>
94
+ <event>
95
+ <id>12</id>
96
+ <name>DLD 2007</name>
97
+ <description></description>
98
+ <header_text>DLD (Digital Life Design), held annually in Munich, covers digital innovation, media and design. &lt;a href="http://www.dld-conference.com/" target="_blank"&gt;Learn more &amp;gt;&amp;gt;&lt;/a&gt;</header_text>
99
+ <slug>dld_2007</slug>
100
+ <url>http://www.dld-conference.com/</url>
101
+ <starts_at>2009-12-23 17:16:00</starts_at>
102
+ </event>
103
+ <event>
104
+ <id>13</id>
105
+ <name>LIFT 2007</name>
106
+ <description></description>
107
+ <header_text>The LIFT Conference, held in Geneva, explores the impact of technology on society.&amp;nbsp;&lt;a href="http://www.liftconference.com/" target="_blank"&gt;Learn more &amp;gt;&amp;gt;&lt;/a&gt; </header_text>
108
+ <slug>lift_2007</slug>
109
+ <url>http://www.liftconference.com/</url>
110
+ <starts_at>2009-12-23 16:46:00</starts_at>
111
+ </event>
112
+ <event>
113
+ <id>14</id>
114
+ <name>Skoll World Forum 2007</name>
115
+ <description></description>
116
+ <header_text>The Skoll World Forum on Social Entrepreneurship is the premier, international platform for accelerating entrepreneurial approaches and innovative solutions to the world&amp;rsquo;s most pressing social issues. &lt;a href="http://skollworldforum.org/"&gt;Learn more &amp;raquo;&lt;/a&gt;</header_text>
117
+ <slug>skoll_2007</slug>
118
+ <url>http://skollworldforum.org/</url>
119
+ <starts_at>2007-03-27 01:00:00</starts_at>
120
+ </event>
121
+ <event>
122
+ <id>15</id>
123
+ <name>TEDSalon 2007 Hot Science</name>
124
+ <description></description>
125
+ <header_text></header_text>
126
+ <slug>tedsalon2007</slug>
127
+ <url></url>
128
+ <starts_at>2007-09-26 00:00:00</starts_at>
129
+ </event>
130
+ <event>
131
+ <id>17</id>
132
+ <name>TED2001</name>
133
+ <description></description>
134
+ <header_text></header_text>
135
+ <slug>2001</slug>
136
+ <url></url>
137
+ <starts_at>2001-02-02 00:00:00</starts_at>
138
+ </event>
139
+ <event>
140
+ <id>18</id>
141
+ <name>TED2009</name>
142
+ <description>TED2009</description>
143
+ <header_text></header_text>
144
+ <slug>2009</slug>
145
+ <url></url>
146
+ <starts_at>2009-02-03 00:01:00</starts_at>
147
+ </event>
148
+ <event>
149
+ <id>19</id>
150
+ <name>TED1984</name>
151
+ <description></description>
152
+ <header_text></header_text>
153
+ <slug>1984</slug>
154
+ <url></url>
155
+ <starts_at>1984-03-03 16:45:00</starts_at>
156
+ </event>
157
+ <event>
158
+ <id>20</id>
159
+ <name>TED1990</name>
160
+ <description></description>
161
+ <header_text></header_text>
162
+ <slug>1990</slug>
163
+ <url></url>
164
+ <starts_at>1990-03-03 16:48:00</starts_at>
165
+ </event>
166
+ <event>
167
+ <id>22</id>
168
+ <name>TED2000</name>
169
+ <description></description>
170
+ <header_text></header_text>
171
+ <slug>2000</slug>
172
+ <url></url>
173
+ <starts_at>2000-02-23 00:00:00</starts_at>
174
+ </event>
175
+ <event>
176
+ <id>23</id>
177
+ <name>TED1999</name>
178
+ <description></description>
179
+ <header_text></header_text>
180
+ <slug>1999</slug>
181
+ <url></url>
182
+ <starts_at>1999-02-17 00:00:00</starts_at>
183
+ </event>
184
+ </events>
185
+ <counts>
186
+ <this>20</this>
187
+ <total>211</total>
188
+ </counts>
189
+ </response>