print('Connect with Tumblr via: {}'.format(auth_url)) oauth_token = raw_input('OAuth Token (from callback url): ') oauth_verifier = raw_input('OAuth Verifier (from callback url): ') t = Tumblpy(key, secret, oauth_token, OAUTH_TOKEN_SECRET) authorized_tokens = t.get_authorized_tokens(oauth_verifier) final_oauth_token = authorized_tokens['oauth_token'] final_oauth_token_secret = authorized_tokens['oauth_token_secret'] print('OAuth Token: {}'.format(final_oauth_token)) print('OAuth Token Secret: {}'.format(final_oauth_token_secret)) else: final_oauth_token = raw_input('OAuth Token: ') final_oauth_token_secret = raw_input('OAuth Token Secret: ') t = Tumblpy(key, secret, final_oauth_token, final_oauth_token_secret) blog_url = t.post('user/info') blog_url = blog_url['user']['blogs'][0]['url'] print('Your blog url is: {}'.format(blog_url)) posts = t.posts(blog_url) print('Here are some posts this blog has made:', posts) # print t.post('post', blog_url=blog_url, params={'type':'text', 'title': 'Test', 'body': 'Lorem ipsum.'})
cfg = { "alt_sizes": -3, "dashboard_param": { "limit": 5, "since_id": 26588344 }, "posts_param": { "limit": 5, "since_id": 26588344 }, "proxies": { "http": "127.0.0.1:61274", "https": "127.0.0.1:61274" } } all_posts = t.posts('kuvshinov-ilya.tumblr.com', None, cfg['posts_param']) # dashboard = t.dashboard( cfg['dashboard_param'] ) # print('Here are some posts this blog has made:', json.dumps(all_posts, indent=4)) data = [] distId = [] for v in all_posts["posts"]: distId.append(v['id']) data.append({ 'id': v['id'], 'source_url': v.get('source_url', ''), 'original_size': v['photos'][0]['original_size']['url'], 'alt_sizes': v['photos'][0]['alt_sizes'][cfg['alt_sizes']]['url']
class TumblrCtrl(object): """docstring for TumblrCtrl""" def __init__(self, frame): super(TumblrCtrl, self).__init__() self.frame = frame self.popup = None # self.imgView = self.frame.get_root().find_first('#ul') self.cfg = { "alt_sizes": -3, "dashboard_param": { "limit": 20, "offset": 0 }, "posts_param": { "limit": 20, "offset": 0 }, "proxies": {} } with open('data.json', 'r') as f: self.cfg.update(json.load(f)) with open('tumblr_credentials.json', 'r') as f: self.tumblr_key = json.load(f) self.proxies = self.cfg['proxies'] # self.offset = self.cfg['dashboard_param']['limit'] self.current_folder = os.getcwd() self.target_folder = os.path.join(self.current_folder, 'imgTemp') if not os.path.isdir(self.target_folder): os.mkdir(self.target_folder) self.download_folder = os.path.join(self.current_folder, 'download') if not os.path.isdir(self.download_folder): os.mkdir(self.download_folder) # 创建一个线程池 self.tpool = TPool(max_workers=20) # 创建一个进程池 self.ppool = PPool(max_workers=2) # self.queue = Queue.Queue() self.tumblr = Tumblpy(self.tumblr_key['consumer_key'], self.tumblr_key['consumer_secret'], self.tumblr_key['oauth_token'], self.tumblr_key['oauth_token_secret'], proxies=self.proxies) def myOnLoadDatas(self, uri): self.tpool.submit(self._downloadInRAM, "photo", uri) return True def loadPreviewImg(self, data): fileName = data['id'] + '_' + data['preview_size'].split("_")[-1] print(fileName) # return file_path = os.path.join(self.target_folder, fileName) if not os.path.isfile(file_path): self.tpool.submit(self._downloadPrev, "photo", data, file_path) else: self.popup.set_style_attribute("background-image", "url(" + file_path + ")") self.popup.set_attribute("imgid", data['id']) self.popup.set_attribute("original", data['original']) pass def loadImgList(self): '''获取图片列表 { "id": 0, "source_url": "", "original_size": "https://*_1280.jpg", "alt_sizes": "https://*_100.jpg" } ''' print('获取图片列表') future_tasks = [ self.ppool.submit(getDashboards, self.tumblr, self.cfg) ] for f in future_tasks: if f.running(): print('is running') for f in as_completed(future_tasks): try: if f.done(): self.cfg['dashboard_param']['offset'] += self.cfg[ 'dashboard_param']['limit'] for x in f.result(): fileName = x['id'] + '_' + x['alt_sizes'].split( "_")[-1] # print(fileName) file_path = os.path.join(self.target_folder, fileName) if not os.path.isfile(file_path): self.tpool.submit(self._download, "photo", x, file_path) else: html = htmlTemplate.format(x['id'], file_path, x['original_size'], x['preview_size']) self.frame.call_function('appendImgList', html) except Exception as e: f.cancel() return # li = sciter.Element.create("li") # li.set_attribute("id", x['id']) # # li.set_attribute("data-src", file_path) # ul.append(li) # li.set_style_attribute( "background-image", file_path ) def _getTumblrList(self): print('_getTumblrList') return self.getDashboard() # return self.getBloggers() def _downloadPrev(self, medium_type, data, file_path): if medium_type == "photo": print('_download photo') req = requests.get(data['preview_size'], proxies=self.proxies) with open(file_path, 'wb') as fh: for chunk in req.iter_content(chunk_size=1024): fh.write(chunk) self.popup.set_style_attribute("background-image", "url(" + file_path + ")") self.popup.set_attribute("imgid", data['id']) self.popup.set_attribute("original", data['original']) # html = htmlTemplate.format( x['id'], file_path, x['original_size'], x['preview_size'] ) # self.frame.call_function('appendImgList', html ) return def downloadOriginal(self, id, url): fileName = id + '_' + url.split("_")[-1] file_path = os.path.join(self.download_folder, fileName) if not os.path.isfile(file_path): self.tpool.submit(self._downloadOriginal, url, file_path) def _downloadOriginal(self, url, file_path): req = requests.get(url, proxies=self.proxies) with open(file_path, 'wb') as fh: for chunk in req.iter_content(chunk_size=1024): fh.write(chunk) def _download(self, medium_type, x, file_path): if medium_type == "photo": print('_download photo') req = requests.get(x['alt_sizes'], proxies=self.proxies) with open(file_path, 'wb') as fh: for chunk in req.iter_content(chunk_size=1024): fh.write(chunk) html = htmlTemplate.format(x['id'], file_path, x['original_size'], x['preview_size']) self.frame.call_function('appendImgList', html) # li = sciter.Element.create("li") # li.set_attribute("id", id) # # li.set_attribute("data-src", file_path) # ul.append(li) # li.set_style_attribute( "background-image", file_path ) return def _downloadInRAM(self, medium_type, uri): print("_downloadInRAM", uri) try: if medium_type == "photo": req = requests.get(uri, proxies=self.proxies) self.frame.data_ready(uri, req.content) except Exception as e: raise e def _mkMainDict(self, d): data = [] for v in d["posts"]: data.append({ 'id': gets(v, 'id', 0), 'link_url': gets(v, 'link_url', ''), 'original_size': gets(v, 'photos.0.original_size.url', ''), 'preview_size': gets( v, 'photos.0.alt_sizes.' + str(self.cfg['preview_size']) + '.url', ''), 'alt_sizes': gets( v, 'photos.0.alt_sizes.' + str(self.cfg['alt_sizes']) + '.url', '') }) return data def getDashboard(self): dashboard = self.tumblr.dashboard(self.cfg['dashboard_param']) if dashboard: self.cfg['dashboard_param']['offset'] += self.cfg[ 'dashboard_param']['limit'] return self._mkMainDict(dashboard) def getBloggers(self): '''取得博主的列表''' all_posts = self.tumblr.posts('kuvshinov-ilya.tumblr.com', None, self.cfg['posts_param']) if all_posts: self.cfg['posts_param']['offset'] += self.cfg['posts_param'][ 'limit'] return self._mkMainDict(all_posts)