4 import json
as simplejson
7 from itertools
import zip_longest
9 from itertools
import izip_longest
as zip_longest
10 from requests_oauthlib
import OAuth1
24 access_token_key=None,
25 access_token_secret=None
53 url = self._BuildUrl(url, extra_params=data)
63 data = simplejson.loads(request.content)
64 if request.status_code != 200:
65 rospy.logwarn(
'post tweet failed. status_code: {}' 66 .format(request.status_code))
68 for error
in data[
'errors']:
69 rospy.logwarn(
'Tweet error code: {}, message: {}' 70 .format(error[
'code'], error[
'message']))
76 in_reply_to_status_id=None):
78 media_list = media_list
or []
79 for i
in range(0, int(math.ceil(len(media_list) / 4.0))):
80 split_media_list.append(media_list[i * 4:(i + 1) * 4])
81 for text, media_list
in zip_longest(texts, split_media_list):
83 media_list = media_list
or []
84 url =
'https://api.twitter.com/1.1/statuses/update.json' 85 data = {
'status': text}
87 if len(media_ids) > 0:
88 data[
'media_ids'] = media_ids
89 if in_reply_to_status_id
is not None:
90 data[
'in_reply_to_status_id'] = in_reply_to_status_id
94 in_reply_to_status_id = data[
'id']
98 url =
'https://upload.twitter.com/1.1/media/upload.json' 100 for media
in media_list:
101 data = {
'media': media}
103 if r.status_code == 200:
104 rospy.loginfo(
'upload media success')
105 media_ids.append(str(r.json()[
'media_id']))
107 rospy.logerr(
'upload media failed. status_code: {}' 108 .format(r.status_code))
109 media_ids =
','.join(media_ids)
114 for text, mlist
in zip_longest(status_list, media_list):
120 in_reply_to_status_id=in_reply_to_status_id)
122 in_reply_to_status_id = data[
'id']
125 def post_media(self, status, media, in_reply_to_status_id=None):
128 url =
'https://api.twitter.com/1.1/statuses/update_with_media.json' 129 data = {
'status': status}
130 data[
'media'] = open(str(media),
'rb').read()
136 in_reply_to_status_id=data[
'id'])