FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-backtype/backtype/api.py at master · tdedecko/python-backtype · GitHub
tdedecko
python-backtype
Repository navigation
Code
Issues
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
python-backtype
/
backtype
/
api.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
141 lines (107 loc) · 4.42 KB
Breadcrumbs
python-backtype
/
backtype
/
api.py
Copy path
File metadata and controls
141 lines (107 loc) · 4.42 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
from
exceptions
import
Exception
from
urllib
import
urlencode
import
urllib2
try
:
import
json
except
ImportError
:
import
simplejson
as
json
class
BacktypeError
(
Exception
):
"""Exception raised by Backtype API."""
pass
class
BacktypeRequestError
(
BacktypeError
):
"""Exception to handle Backtype API response errors."""
pass
class
Backtype
(
object
):
def
__init__
(
self
,
key
,
user_agent
=
None
):
self
.
_key
=
key
self
.
_user_agent
=
user_agent
self
.
_action_name
=
''
self
.
_config_params
=
{}
self
.
_cached_action_name
=
None
self
.
_cached_params
=
None
self
.
response
=
''
self
.
items_per_page
=
None
# Between 10-100
self
.
_page
=
None
def
__getattribute__
(
self
,
k
):
try
:
return
object
.
__getattribute__
(
self
,
k
)
except
AttributeError
:
self
.
_action_name
=
'.'
.
join
((
self
.
_action_name
,
k
)).
lstrip
(
'.'
)
return
self
def
__call__
(
self
,
**
params
):
# Check if action is valid.
action_name
=
self
.
_action_name
if
not
action_name
in
ACTIONS
.
keys
():
self
.
_cleanup
()
raise
BacktypeError
(
'%s is an unsupported action.'
%
action_name
)
# Get action and build params
action
=
ACTIONS
[
action_name
]
self
.
_build_config_params
()
request_params
=
params
.
copy
()
request_params
.
update
(
self
.
_config_params
)
self
.
_cleanup
()
# Cleanup in case of unexpected failure.
# Build request.
request_url
=
action
.
build_request_url
(
request_params
)
request
=
urllib2
.
Request
(
request_url
)
if
not
self
.
_user_agent
is
None
:
request
.
add_header
(
'User-Agent'
,
self
.
_user_agent
)
try
:
handle
=
urllib2
.
urlopen
(
request
)
response
=
handle
.
read
()
response
=
json
.
loads
(
response
)
except
urllib2
.
HTTPError
:
raise
BacktypeError
(
'Unable to connect to Backtype using action: %s'
%
action_name
)
except
urllib2
.
URLError
:
raise
BacktypeError
(
'Unable to handle URL: %s'
%
request_url
)
except
ValueError
:
raise
BacktypeError
(
'Invalid json response received: %s'
%
response
)
# Clean up and cache response.
self
.
_cache_action
(
action_name
,
params
,
response
)
return
response
def
_cache_action
(
self
,
action_name
,
params
,
response
):
"""Cache action and clear current action."""
self
.
_cached_action_name
=
action_name
self
.
_cached_params
=
params
.
copy
()
self
.
response
=
response
def
_build_config_params
(
self
):
self
.
_config_params
[
'key'
]
=
self
.
_key
if
not
self
.
_page
is
None
:
self
.
_config_params
[
'page'
]
=
self
.
_page
if
not
self
.
items_per_page
is
None
:
self
.
_config_params
[
'itemsperpage'
]
=
self
.
items_per_page
def
_cleanup
(
self
):
self
.
_action_name
=
''
self
.
_config_params
=
{}
class
Action
(
object
):
def
__init__
(
self
,
url_format
,
req_params
,
std_params
=
True
):
self
.
url_format
=
url_format
self
.
req_params
=
req_params
self
.
std_params
=
std_params
self
.
BASE_URL
=
'http://api.backtype.com'
def
build_request_url
(
self
,
params
):
self
.
_check_req_params
(
params
)
action
=
self
.
_format_url_action
(
params
)
request_url
=
'%s%s?%s'
%
(
self
.
BASE_URL
,
action
,
urlencode
(
params
))
return
request_url
def
_check_req_params
(
self
,
params
):
for
param
in
self
.
req_params
:
if
not
param
in
params
.
keys
():
raise
BacktypeError
(
"'%s' parameter is required for action"
%
param
)
def
_format_url_action
(
self
,
params
):
# Handle non-standard params
if
not
self
.
std_params
:
param_tuple
=
()
for
param
in
self
.
req_params
:
param_tuple
+=
(
params
[
param
],)
del
params
[
param
]
return
self
.
url_format
%
param_tuple
return
self
.
url_format
ACTIONS
=
{}
ACTIONS
[
'comments.search'
]
=
Action
(
'/comments/search.json'
, [
'q'
])
ACTIONS
[
'comments.connect'
]
=
Action
(
'/comments/connect.json'
, [
'url'
])
ACTIONS
[
'comments.connect.stats'
]
=
Action
(
'/comments/connect/stats.json'
, [
'url'
])
ACTIONS
[
'url.comments'
]
=
Action
(
'/url/%s/comments.json'
, [
'url'
],
std_params
=
False
)
ACTIONS
[
'post.comments'
]
=
Action
(
'/post/comments.json'
, [
'url'
])
ACTIONS
[
'post.stats'
]
=
Action
(
'/post/stats.json'
, [
'url'
])
ACTIONS
[
'tweetcount'
]
=
Action
(
'/tweetcount.json'
, [
'q'
])
ACTIONS
[
'rate_limit_status'
]
=
Action
(
'/rate_limit_status.json'
, [])
Back
|
FazBrowse Home
|
New Git URL