rawapi 0.1.2 → 0.2.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.
- data/CHANGELOG +3 -0
- data/LICENSE +22 -0
- data/README +28 -0
- data/demo.rb +7 -0
- data/lib/awareness_api/entry.rb +9 -0
- data/lib/awareness_api/feed.rb +11 -0
- data/lib/awareness_api/item.rb +9 -0
- data/lib/awareness_api/referer.rb +5 -0
- data/lib/awareness_api/response.rb +43 -0
- data/lib/awareness_api.rb +160 -0
- metadata +49 -45
- data/CHANGELOG.txt +0 -0
- data/History.txt +0 -0
- data/Manifest.txt +0 -16
- data/README.txt +0 -3
- data/Rakefile +0 -54
- data/lib/rawapi/entry.rb +0 -7
- data/lib/rawapi/feed.rb +0 -7
- data/lib/rawapi/item.rb +0 -7
- data/lib/rawapi/referer.rb +0 -3
- data/lib/rawapi/response.rb +0 -42
- data/lib/rawapi/version.rb +0 -9
- data/lib/rawapi.rb +0 -132
- data/setup.rb +0 -1585
data/lib/rawapi.rb
DELETED
@@ -1,132 +0,0 @@
|
|
1
|
-
Dir[File.join(File.dirname(__FILE__), 'rawapi/**/*.rb')].sort.each { |lib| require lib }
|
2
|
-
|
3
|
-
require 'open-uri'
|
4
|
-
require 'rexml/document'
|
5
|
-
include REXML
|
6
|
-
|
7
|
-
# Class to provide the interface to the Awareness API
|
8
|
-
#
|
9
|
-
# dates:
|
10
|
-
# * Individual dates always use this format: YYYY-MM-DD
|
11
|
-
# * Date ranges are expressed with a comma: YYYY-MM-D1, YYYY-MM-D7 means all dates between and including D1 and D7
|
12
|
-
# * If a range is specified, the second date must always be later than the first date
|
13
|
-
# * A single date will be interpreted as a range of one date: YYYY-MM-D1 = YYYY-MM-D1, YYYY-MM-D1
|
14
|
-
# * Discrete ranges are separated by a slash: YYYY-MM-D1/YYYY-MM-D5/YYYY-MM-D7,YYYY-MM-D14 means D1 and D5 and all dates between and including D7 and D14. Multiple discrete ranges may also be provided by using multiple date parameters in a single GET request.
|
15
|
-
# * If no date is specified, Yesterday's date is assumed. "Current" is always yesterday's data. "Live" daily data is not yet available.
|
16
|
-
# * An individual date starts at 12am CDT (GMT -5) and ends 12am CDT the next day. Custom timezone support is not yet available.
|
17
|
-
class AwarenessApi
|
18
|
-
ROOT_API_URL = 'http://api.feedburner.com/awareness/1.0/'
|
19
|
-
|
20
|
-
# Get Basic Feed Awareness Data
|
21
|
-
#
|
22
|
-
# options:
|
23
|
-
# * uri: The URI of the feed (same as http://feeds.feedburner.com/<feeduri>) Must be used if id is not specified
|
24
|
-
# * id: The FeedBurner id of the feed (visible when editing a feed in your account, e.g., http://www.feedburner.com/fb/a/optimize?id=<id>). May be used instead if uri is not specified.
|
25
|
-
# * dates: Dates are used to specify the period for which data is need (see note on dates above)
|
26
|
-
def get_feed_data(options)
|
27
|
-
option_string = parse_options(options)
|
28
|
-
|
29
|
-
response_xml = open("#{ROOT_API_URL}GetFeedData?#{option_string}").read
|
30
|
-
return parse_xml(response_xml)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Get Individual Item Awareness Data (TotalStats pro)
|
34
|
-
#
|
35
|
-
# options:
|
36
|
-
# * uri: The URI of the feed (same as http://feeds.feedburner.com/<feeduri>) Must be used if id is not specified
|
37
|
-
# * id: The FeedBurner id of the feed (visible when editing a feed in your account, e.g., http://www.feedburner.com/fb/a/optimize?id=<id>). May be used instead if uri is not specified.
|
38
|
-
# * itemurl: The source URL of item (not the FeedBurner generated URL, but the original source URL). Multiple itemurl parameters may be provided in a single request in order to retrieve additional items.
|
39
|
-
# * dates: Dates are used to specify the period for which data is need (see note on dates above)
|
40
|
-
def get_item_data(options)
|
41
|
-
option_string = parse_options(options)
|
42
|
-
|
43
|
-
response_xml = open("#{ROOT_API_URL}GetItemData?#{option_string}").read
|
44
|
-
return parse_xml(response_xml)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Get Resyndication Feed Awareness Data (TotalStats pro)
|
48
|
-
#
|
49
|
-
# options:
|
50
|
-
# * uri: The URI of the feed (same as http://feeds.feedburner.com/<feeduri>)
|
51
|
-
# * id: The FeedBurner id of the feed (visible when editing a feed in your account, e.g., http://www.feedburner.com/fb/a/optimize?id=<id>). May be used instead if uri is not specified.
|
52
|
-
# * itemurl: The source URL of item (not the FeedBurner generated URL, but the original source URL). Multiple itemurl parameters may be provided in a single request in order to retrieve additional items.
|
53
|
-
# * dates: Dates are used to specify the period for which data is need (see note on dates above)
|
54
|
-
def get_resyndication_data(options)
|
55
|
-
option_string = parse_options(options)
|
56
|
-
|
57
|
-
response_xml = open("#{ROOT_API_URL}GetResyndicationData?#{option_string}").read
|
58
|
-
return parse_xml(response_xml)
|
59
|
-
end
|
60
|
-
|
61
|
-
private
|
62
|
-
def parse_options(options)
|
63
|
-
raise "options must include a feed id or uri" unless options[:id] or options[:uri]
|
64
|
-
|
65
|
-
options[:uri] = nil if options[:id] and options[:uri]
|
66
|
-
|
67
|
-
return options.collect {|key, value| "#{key}=#{value}" unless value.nil?}.compact.join('&')
|
68
|
-
end
|
69
|
-
|
70
|
-
def parse_xml(response_xml)
|
71
|
-
response = Response.new
|
72
|
-
|
73
|
-
xml = Document.new(response_xml)
|
74
|
-
rsp_node = xml.root
|
75
|
-
|
76
|
-
response.status = rsp_node.attributes['stat']
|
77
|
-
|
78
|
-
if response.status == 'fail'
|
79
|
-
response.code = rsp_node.elements[1].attributes['code']
|
80
|
-
response.message = rsp_node.elements[1].attributes['msg']
|
81
|
-
elsif response.status == 'ok'
|
82
|
-
for feed_node in rsp_node.elements
|
83
|
-
feed = Feed.new
|
84
|
-
|
85
|
-
feed.id = feed_node.attributes['id']
|
86
|
-
feed.uri = feed_node.attributes['uri']
|
87
|
-
|
88
|
-
response.feeds << feed
|
89
|
-
|
90
|
-
for entry_node in feed_node.elements
|
91
|
-
entry = Entry.new
|
92
|
-
|
93
|
-
entry.date = entry_node.attributes['date']
|
94
|
-
entry.circulation = entry_node.attributes['circulation']
|
95
|
-
entry.hits = entry_node.attributes['hits']
|
96
|
-
|
97
|
-
feed.entries << entry
|
98
|
-
|
99
|
-
for item_node in entry_node.elements
|
100
|
-
item = Item.new
|
101
|
-
|
102
|
-
item.title = item_node.attributes['title']
|
103
|
-
item.url = item_node.attributes['url']
|
104
|
-
item.itemviews = item_node.attributes['itemviews']
|
105
|
-
item.clickthroughs = item_node.attributes['clickthroughs']
|
106
|
-
|
107
|
-
entry.items << item
|
108
|
-
|
109
|
-
for referer_node in item_node.elements
|
110
|
-
referer = Referer.new
|
111
|
-
|
112
|
-
referer.url = referer_node.attributes['url']
|
113
|
-
referer.itemviews = referer_node.attributes['itemviews']
|
114
|
-
referer.clickthroughs = referer_node.attributes['clickthroughs']
|
115
|
-
|
116
|
-
item.referers << referer
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
return response
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# rawapi = AwarenessApi.new
|
128
|
-
# opts = {:uri => 'CommonThread', :dates => '2007-03-20,2007-03-23'}
|
129
|
-
#
|
130
|
-
# puts rawapi.get_feed_data(opts)
|
131
|
-
# puts rawapi.get_item_data(opts)
|
132
|
-
# puts rawapi.get_resyndication_data(opts)
|