def zip_mod(): """ need nginx module mod_zip https://github.com/evanmiller/mod_zip """ url = request.args.get('url') try: # prevent universal crawler request.cookies['csrf'] except KeyError: return abort(403) if url: g.cur.execute(''' SELECT `title`,`picsUrls` FROM `albums` WHERE `url` = %s''', (url,)) r = g.cur.fetchone() if r: title = r.get('title').encode('utf-8') files = r.get('picsUrls').split('\n') a = time.time() tasks = ThreadsTask() threads = [] for f in files: t = threading.Thread(target=tasks.run, args=(f,)) threads.append(t) t.start() for t in threads: t.join() fs = "\n".join(tasks.result) print 'zip:', time.time() - a return Response(fs, headers={ 'X-Archive-Charset': 'utf-8', 'X-Archive-Files': 'zip', 'Content-Disposition': 'attachment; filename="%s.zip"' % title }) else: return abort(404) else: return abort(400)
def skip(): if session['admin'] is True: id_list = request.form.get('ids').split(',') statement = 'UPDATE `albums` set ooxx=%s WHERE id in ({})'.format(','.join(['%s'] * len(id_list))) args = [request.form['ooxx']] args.extend(id_list) g.db.cur.execute(statement, args) g.db.commit() return jsonify(response='ok') else: abort(404)
def skip(): if session['admin'] is True: id_list = request.form.get('ids').split(',') statement = 'UPDATE `albums` set ooxx=%s WHERE id in ({})'.format( ','.join(['%s'] * len(id_list))) args = [request.form['ooxx']] args.extend(id_list) g.db.cur.execute(statement, args) g.db.commit() return jsonify(response='ok') else: abort(404)
def download_album(method): if method == "txt": return down_album_urls() elif method == "zip": return zip_mod() else: return abort(404)
def preview(): url = request.args.get('url') # todo: albums img pages try: page = abs(int(request.args.get('p'))) except TypeError: page = 0 if url: g.cur.execute( ''' SELECT `picsUrls`,`title`,`pics` FROM `albums` WHERE `url` = %s''', (url, )) r = g.cur.fetchone() if r: count = r.get('pics') urls = r.get('picsUrls') thumbnails = re.sub('big.', 'small.', urls).split('\n') # [0:20] return render_template('preview.html', title=r.get('title'), imgs=thumbnails, url=url, count=count) else: return 'don\'t found!' else: return abort(400)
def callback(): code = request.args.get('code') if not code: abort(400) access_token = 'https://api.weibo.com/oauth2/access_token?client_id=%s&client_secret=%s&grant_type=authorization_code&redirect_uri=%s&code=%s' \ % (APPKEY, APPSECRET, REDIRECTURI, code) r = requests.post(access_token) data = json.loads(r.content) try: access_token = data[u'access_token'] uid = int(data[u'uid']) expire = int(data[u'expires_in']) except KeyError: return 'no keys!<a href="/">return back</a>' usershow = 'https://api.weibo.com/2/users/show.json?access_token=%s&uid=%s' % ( access_token, uid) r = requests.get(usershow) info = json.loads(r.content) name = info[u'name'] avatar = info[u'profile_image_url'] province = info[u'province'] city = info[u'city'] location = info[u'location'] description = info[u'description'] blog = info[u'url'] gender = info[u'gender'] followers = info[u'followers_count'] friends = info[u'friends_count'] statuses = info[u'statuses_count'] created = info[u'created_at'] avatar_hd = info[u'avatar_hd'] g.cur.execute( """REPLACE INTO `users` (`uid`,`access_token`,`name`,`avatar`,`province`,`city`,`location`,`description`,`blog`,`gender`,`followers`,`friends`,`statuses`,`created`,`avatar_hd`)\ VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""", (uid, access_token, name, avatar, province, city, location, description, blog, gender, followers, friends, statuses, created, avatar_hd)) g.db.commit() # cookie expire # app.permanent_session_lifetime = timedelta(seconds=expire) session['uid'] = uid return redirect(url_for('index'))
def zip_mod(): """ need nginx module mod_zip https://github.com/evanmiller/mod_zip """ url = request.args.get('url') try: # prevent universal crawler request.cookies['csrf'] except KeyError: return abort(403) if url: g.cur.execute( ''' SELECT `title`,`picsUrls` FROM `albums` WHERE `url` = %s''', (url, )) r = g.cur.fetchone() if r: title = r.get('title').encode('utf-8') files = r.get('picsUrls').split('\n') a = time.time() tasks = ThreadsTask() threads = [] for f in files: t = threading.Thread(target=tasks.run, args=(f, )) threads.append(t) t.start() for t in threads: t.join() fs = "\n".join(tasks.result) print 'zip:', time.time() - a return Response(fs, headers={ 'X-Archive-Charset': 'utf-8', 'X-Archive-Files': 'zip', 'Content-Disposition': 'attachment; filename="%s.zip"' % title }) else: return abort(404) else: return abort(400)
def callback(): code = request.args.get('code') if not code: abort(400) access_token = 'https://api.weibo.com/oauth2/access_token?client_id=%s&client_secret=%s&grant_type=authorization_code&redirect_uri=%s&code=%s' \ % (APPKEY, APPSECRET, REDIRECTURI, code) r = requests.post(access_token) data = json.loads(r.content) try: access_token = data[u'access_token'] uid = int(data[u'uid']) expire = int(data[u'expires_in']) except KeyError: return 'no keys!<a href="/">return back</a>' usershow = 'https://api.weibo.com/2/users/show.json?access_token=%s&uid=%s' % (access_token, uid) r = requests.get(usershow) info = json.loads(r.content) name = info[u'name'] avatar = info[u'profile_image_url'] province = info[u'province'] city = info[u'city'] location = info[u'location'] description = info[u'description'] blog = info[u'url'] gender = info[u'gender'] followers = info[u'followers_count'] friends = info[u'friends_count'] statuses = info[u'statuses_count'] created = info[u'created_at'] avatar_hd = info[u'avatar_hd'] g.cur.execute("""REPLACE INTO `users` (`uid`,`access_token`,`name`,`avatar`,`province`,`city`,`location`,`description`,`blog`,`gender`,`followers`,`friends`,`statuses`,`created`,`avatar_hd`)\ VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""", ( uid, access_token, name, avatar, province, city, location, description, blog, gender, followers, friends, statuses, created, avatar_hd)) g.db.commit() # cookie expire # app.permanent_session_lifetime = timedelta(seconds=expire) session['uid'] = uid return redirect(url_for('index'))
def down_album_urls(): url = request.args.get('url') if url: g.cur.execute(''' SELECT `picsUrls`,`title` FROM `albums` WHERE `url` = %s''', (url,)) r = g.cur.fetchone() if r: # return Response(r.get('picsUrls'),mimetype='text/pain') title = r.get('title').encode('utf-8') # print title.decode('utf-8'),type(title) return Response(r.get('picsUrls'), headers={ 'Content-Type': 'text/pain; charset=utf-8', 'Content-Disposition': 'attachment; filename="%s.txt"' % title }) else: return 'don\'t found!' else: return abort(400)
def down_album_urls(): url = request.args.get('url') if url: g.cur.execute( ''' SELECT `picsUrls`,`title` FROM `albums` WHERE `url` = %s''', (url, )) r = g.cur.fetchone() if r: # return Response(r.get('picsUrls'),mimetype='text/pain') title = r.get('title').encode('utf-8') # print title.decode('utf-8'),type(title) return Response(r.get('picsUrls'), headers={ 'Content-Type': 'text/pain; charset=utf-8', 'Content-Disposition': 'attachment; filename="%s.txt"' % title }) else: return 'don\'t found!' else: return abort(400)
def preview(): url = request.args.get('url') # todo: albums img pages try: page = abs(int(request.args.get('p'))) except TypeError: page = 0 if url: g.cur.execute(''' SELECT `picsUrls`,`title`,`pics` FROM `albums` WHERE `url` = %s''', (url,)) r = g.cur.fetchone() if r: count = r.get('pics') urls = r.get('picsUrls') thumbnails = re.sub('big.', 'small.', urls).split('\n') # [0:20] return render_template('preview.html', title=r.get('title'), imgs=thumbnails, url=url, count=count ) else: return 'don\'t found!' else: return abort(400)
def debug(): # abort(401) abort(451)
def out(): if session['admin'] is True: session.pop('admin', None) return redirect(url_for('index')) else: abort(404)