def login(): if not 'user_id' in session: if request.args.get('code', False): fb = FB(current_app.config['FACEBOOK']['APP_ID'], current_app.config['FACEBOOK']['APP_SECRET']) access_token, expires = fb.get_access_token(request.args['code']) graph = Graph(access_token) profile_data = graph.get('/me', {}) user = User.all().filter('facebook_id =', profile_data['id']).get() if user is None: user = User() user.facebook_id = profile_data['id'].decode('utf-8') user.name = u"{0}{1}".format(profile_data['last_name'], profile_data['first_name']) image_url = graph.get('/me/picture', {'redirect': False})['data']['url'] user.profile_image = image_url.decode('utf-8') user.put() fb_session = FacebookSession.all().filter('user ='******'user_id'] = user.key().id_or_name() else: return render_template('login.html', facebook=current_app.config['FACEBOOK']) return redirect(url_for('groups.group_list'))
source_message['text'] = posts[i]['text'] except Exception: source_message['text'] = "" if 'attachments' in posts[i]: for attach in posts[i]['attachments']: if 'photo' in attach: source_message['attachements'].append({"type": "photo", "src": attach['photo']['src_big']}) if 'link' in attach: source_message['attachements'].append({"type": "url", "src": attach['link']['url']}) messages.append(source_message) # Source - fb if source.sn_type.code == 'fb': fb_settings['redirect_uri'] = "%s%s?src=fb" % (HTTP_HOST, reverse('my.views.new')) fb = FB(fb_settings, code=source.access_token) fb.login() try: posts = fb.getGroupFeed(source.userid) except Exception: posts = [] max_items = MAX_POST_ITEMS if len(posts) < MAX_POST_ITEMS: max_items = len(posts) for i in range(0, max_items): source_message = {'text': '', 'attachements': []} item = posts[i] try: exist = PostItem.objects.get(pk=item['id']) except PostItem.DoesNotExist: pi = PostItem()
def new(request): if not request.user: return HttpResponseRedirect(reverse('registration.views.login')) source = None fields = None sn_types = SNType.objects.all() if 'src' in request.GET: source = request.GET['src'] #rss feed if source == 'rss': error = 0 if request.POST: response = str(feedtest(request)) if response.find('Feed ok') == -1: error = 1 else: pp = PostPlace() pp.sn_type = SNType.objects.get(code='rss') pp.url = request.POST['feedurl'] pp.user = request.user pp.save() s = Sync() s.source = pp s.user = pp.user s.save() return HttpResponseRedirect(reverse('my.views.sync', args=[s.id])) fields = [ {'name': 'feedurl', 'type': 'text', 'size': 50, 'label': 'Feed URL', 'sort': 0}, #{'name': 'feederror', 'type': 'error', 'message': '!!!!!'}, {'name': 'testfeed', 'type': 'button', 'size': 5, 'value': 'Test feed', 'onclick': 'feedtest();', 'sort': 3}, {'name': 'testfeedresult', 'type': 'alertdiv', 'sort': 4}, {'name': 'feeduptime', 'type': 'select', 'values': [{'value': 30, 'name': '30 min'}], 'label': 'Refresh time', 'sort': 5}, {'name': 'feedsave', 'type': 'submit', 'value': 'Далее', 'sort': 6}, ] if error: import operator fields.append({'name': 'feederror', 'type': 'error', 'message': "Не получается разобрать RSS канал. Может в URL ошиблись?", 'sort': 1}) fields.sort(key=operator.itemgetter('sort')) # vkontakte if source == 'vk': pp = vkauth(request) if pp: s = Sync() s.source = pp s.user = pp.user s.save() return HttpResponseRedirect(reverse('my.views.sync', args=[s.id])) fields = [ #{'name': 'message', 'type': 'message', 'message': vk_notice}, {'name': 'vkauth', 'type': 'button', 'size': 5, 'value': 'Авторизация через сайт Vkontakte', 'onclick': 'vkontakteauth(\'%s%s?%s\');' % (HTTP_HOST, reverse('my.views.new'), 'src=vk')}, #{'name': 'token', 'type': 'text', 'size': 50, 'label': 'Token'}, #{'name': 'feedsave', 'type': 'submit', 'value': 'Далее'}, ] # twitter if source == 'twitter': pp = twauth(request) if pp: s = Sync() s.source = pp s.user = pp.user s.save() return HttpResponseRedirect(reverse('my.views.sync', args=[s.id])) tw = Tweet(twitter_settings) register = tw.register( callbackurl="%s%s?src=twitter" % (HTTP_HOST, reverse('my.views.new'))) request.session['oauth_token_secret'] = register['data']['oauth_token_secret'] request.session['oauth_token'] = register['data']['oauth_token'] fields = [ {'name': 'twauth', 'type': 'button', 'size': 5, 'value': 'Авторизоваться через Twitter', 'onclick': 'twitterauth(\'%s?src=twitter\', \'%s\');' % ( reverse('my.views.new'), register['url'])}, ] #facebook if source == 'fb': pp = fbauth(request) if pp: s = Sync() s.source = pp s.user = pp.user s.save() return HttpResponseRedirect(reverse('my.views.sync', args=[s.id])) fb_settings['redirect_uri'] = "%s%s?src=fb" % (HTTP_HOST, reverse('my.views.new')) fb = FB(fb_settings) url = fb.register() fields = [ {'name': 'fbauth', 'type': 'button', 'size': 5, 'value': 'Авторизоваться через Facebook', 'onclick': 'facebookauth(\'%s\');' % url}, ] # forsquare if source == 'fs': callbackurl = "%s%s%%3Fsrc%%3Dfs" % (HTTP_HOST, reverse('my.views.new')) pp = fsauth(request, callbackurl) if pp: s = Sync() s.source = pp s.user = pp.user s.save() return HttpResponseRedirect(reverse('my.views.sync', args=[s.id])) fields = [ {'name': 'fsauth', 'type': 'button', 'size': 5, 'value': 'Авторизация через сайт Foursquare', 'onclick': 'foursquareauth(\'%s\');' % callbackurl}, ] #livejournal if source == 'lj': if request.POST: pp = PostPlace() pp.sn_type = SNType.objects.get(code='lj') pp.user = request.user pp.login = request.POST['user'] pp.password = md5.md5(request.POST['password']).hexdigest() pp.save() s = Sync() s.source = pp s.user = pp.user s.save() return HttpResponseRedirect(reverse('my.views.sync', args=[s.id])) fields = [ {'name': 'message', 'type': 'message', 'message': lj_notice}, {'name': 'user', 'type': 'text', 'size': 50, 'label': 'Lj user'}, {'name': 'password', 'type': 'password', 'size': 50, 'label': 'Password'}, {'name': 'feedsave', 'type': 'submit', 'value': 'Продолжить'}, ] return {'sn_types': sn_types, 'source': source, 'fields': fields}
def sync(request, syncid): errors = [] try: sync = Sync.objects.get(pk=syncid) except Sync.DoesNotExist: return HttpResponseNotFound() sn_types = SNType.objects.filter(read_only=False) if request.POST: sync.title = request.POST['synctitle'] sync.save() for var in request.POST.keys(): test = re.findall("sync_target_id_(\d+)", var) if test and test[0] and request.POST[var]: pp = PostPlace.objects.get(pk=test[0]) pp.userid = request.POST[var] pp.save() for var in request.POST.keys(): test = re.findall("userid_(\d+)", var) if test and test[0] and request.POST[var]: pp = PostPlace.objects.get(pk=test[0]) pp.userid = request.POST[var] pp.save() if sync.source.sn_type.code == 'vk': vk = VK(vk_settings) groups = vk.VKGetGroups(sync.source.access_token) if 'error' in groups: raise Exception, groups['error']['error_msg'] if 'response' in groups: groups = groups['response'] sync.source.sources = [] for i in range(1, len(groups)): group = groups[i] if group['is_admin']: sync.source.sources.append({'id': group['gid'], 'name': group['name']}) if sync.source.sn_type.code == 'fb': fb_settings['redirect_uri'] = "%s%s?src=fb" % (HTTP_HOST, reverse('my.views.new')) fb = FB(fb_settings, code=sync.source.access_token) sync.source.sources = [] try: fb.login() groups = fb.getGroups() pages = fb.getPages() except Exception: pass if groups: for group in groups: if 'administrator' in group: sync.source.sources.append({'id': int(group['id']), 'name': 'Группа - ' + group['name']}) if pages: for page in pages: sync.source.sources.append({'id': int(page['id']), 'name': 'Страницы - ' + page['name']}) # for group in groups: # if 'administrator' in group: # sync.source.sources.append({'id': int(group['id']), 'name': group['name']}) destination = None destinations_vk = [] destinations_fb = [] fields = None if 'destination' in request.GET: destination = request.GET['destination'] if destination == 'vk': if request.POST and 'token' in request.POST: pp = PostPlace() pp.sn_type = SNType.objects.get(code='vk') pp.user = request.user pp.access_token = request.POST['token'] pp.save() sync.destination.add(pp) sync.save() return HttpResponseRedirect(reverse('my.views.sync', args=[sync.id])) fields = [ {'name': 'vkauth', 'type': 'button', 'size': 5, 'value': 'Авторизация через сайт Vkontakte', 'onclick': 'vkontakteauth(\'%s%s\');' % (HTTP_HOST, reverse('my.views.syncvk', args=[sync.id]))}, ] if destination == 'twitter': tw = Tweet(twitter_settings) register = tw.register( callbackurl="%s%s" % (HTTP_HOST, reverse('my.views.synctwitter', args=[sync.id]))) request.session['oauth_token_secret'] = register['data']['oauth_token_secret'] request.session['oauth_token'] = register['data']['oauth_token'] fields = [ {'name': 'twauth', 'type': 'button', 'size': 5, 'value': 'Авторизоваться через Twitter', 'onclick': 'twitterauth(\'%s\', \'%s\');' % ( reverse('my.views.synctwitter', args=[sync.id]), register['url'])}, ] if destination == 'fb': fb_settings['redirect_uri'] = "%s%s" % (HTTP_HOST, reverse('my.views.syncfacebook', args=[sync.id])) fb = FB(fb_settings) url = fb.register() fields = [ {'name': 'fbauth', 'type': 'button', 'size': 5, 'value': 'Авторизоваться через Facebook', 'onclick': 'facebookauth(\'%s\');' % url}, ] #livejournal if destination == 'lj': if request.POST: pp = PostPlace() pp.sn_type = SNType.objects.get(code='lj') pp.user = request.user pp.login = request.POST['user'] pp.password = md5.md5(request.POST['password']).hexdigest() pp.save() sync.destination.add(pp) sync.save() return HttpResponseRedirect(reverse('my.views.sync', args=[sync.id])) fields = [ {'name': 'message', 'type': 'message', 'message': lj_notice}, {'name': 'user', 'type': 'text', 'size': 50, 'label': 'Lj user'}, {'name': 'password', 'type': 'password', 'size': 50, 'label': 'Password'}, {'name': 'feedsave', 'type': 'submit', 'value': 'Продолжить'}, ] if sync.destination.all(): for dest in sync.destination.all(): new_sn_types = [] for sn_type in sn_types: if sn_type != dest.sn_type: new_sn_types.append(sn_type) sn_types = new_sn_types if dest.sn_type.code == 'vk': req = "https://api.vkontakte.ru/method/groups.get?access_token=%s&extended=1" % dest.access_token resp = urllib2.urlopen(req) groups = json.loads(resp.read()) if 'error' in groups: errors.append({'dest_id': dest.id, 'message': groups['error']['error_msg']}) sync.destination.remove(dest) if 'response' in groups: groups = groups['response'] for i in range(1, len(groups)): group = groups[i] if group['is_admin']: destinations_vk.append({'id': group['gid'], 'name': group['name']}) if dest.sn_type.code == 'fb': groups = None pages = None fb_settings['redirect_uri'] = "%s%s" % (HTTP_HOST, reverse('my.views.syncfacebook', args=[sync.id])) fb = FB(fb_settings, code=dest.access_token) try: fb.login() groups = fb.getGroups() pages = fb.getPages() except Exception: pass if groups: for group in groups: if 'administrator' in group: destinations_fb.append({'id': int(group['id']), 'name': 'Группа - ' + group['name']}) if pages: for page in pages: destinations_fb.append({'id': int(page['id']), 'name': 'Страница - ' + page['name']}) return {'sync': sync, 'sn_types': sn_types, 'destination': destination, 'fields': fields, 'destinations_vk': destinations_vk, 'destinations_fb': destinations_fb, 'errors': errors}