def populate_users(numUsers): r = reddit_api.praw_instance() subreddit = r.get_subreddit('test') posts = subreddit.get_hot(limit=numUsers) # subreddit = r.get_front_page() posts_dict = {} for thing in posts: username = str(thing.author) if not models.User.query.filter_by(reddit_username=username).first(): u = generate_random_user(username) db.session.add(u) subs = reddit_api.get_offsite_user_favorite_subs(username) for sub in subs: if models.Subreddit.query.filter_by(name=sub.name).first(): print(sub.name + 'found') subreddit = models.Subreddit.query.filter_by( name=sub.name).first() else: print(sub.name + ' not found') subreddit = models.Subreddit(name=sub.name) db.session.add(subreddit) f = u.favorite(subreddit) if f is not None: db.session.add(f) print('favorited ' + sub.name) else: print(sub.name + ' already favorited by ' + str(u)) db.session.commit()
def get_favorite_subs(user): time1 = time.time() r = praw_instance() reddit_user = r.get_redditor(user.username) comments = reddit_user.get_comments(sort='new', time='all', limit=100) comments_by_subreddit = [] try: for comment in comments: comments_by_subreddit.append(comment.subreddit.display_name) except praw.errors.NotFound as e: print e print "There be an HTTP error. The user probably doesn't have any comments, or Reddit might be down." comments = collections.Counter(comments_by_subreddit) top_subs_by_comments = sorted(comments.items(), key=operator.itemgetter(1), reverse=True) subs = [] for key, value in top_subs_by_comments[:3]: sub = models.Subreddit(name=key) subs.append(sub) pprint(comments) pprint(subs) print(time.time() - time1) return subs
def register(): if current_user.registered and not current_user.deleted: return redirect(url_for('match')) form = forms.RegistrationForm(request.form) if request.method == 'POST' and form.validate(): user = current_user user.username = form.username.data user.allow_reddit_notifications = form.allow_reddit_notifications.data user.bio = form.bio.data user.newsletter = True user.registered = True user.created_on = datetime.datetime.now() user.email_verified = False if form.email.data: user.email = form.email.data else: user.email = None favorite_subs = [] favorite_subs.append(form.favorite_sub_1.data.lower()) if form.favorite_sub_2.data: favorite_subs.append(form.favorite_sub_2.data.lower()) if form.favorite_sub_3.data: favorite_subs.append(form.favorite_sub_3.data.lower()) user.unfavorite_all() for sub in favorite_subs: # strip /r/ from name if '/' in sub: sub = sub.split('/')[-1] if models.Subreddit.query.filter_by(name = sub).first() is None: subreddit = models.Subreddit(name=sub) db.session.add(subreddit) db.session.commit() user.favorite(subreddit) else: subreddit = models.Subreddit.query.filter_by(name = sub).first() user.favorite(subreddit) db.session.commit() return redirect(url_for('match')) form.allow_reddit_notifications.default = True form.process() return render_template('register.html', title='Reddimatch - Register', form=form, page_class='register_page')
def populate_subreddit_db(numSubreddits): r = reddit_api.praw_instance() front_page = r.get_front_page(limit=numSubreddits) front_page_dict = {} for thing in front_page: subreddit_name = str(thing.subreddit) subreddit_id = str(thing.subreddit_id) if not models.Subreddit.query.filter_by(name=subreddit_name).first(): sub = models.Subreddit(name=subreddit_name, reddit_id=subreddit_id) db.session.add(sub) db.session.commit() else: sub = models.Subreddit.query.filter_by(name=subreddit_name).first() sub.reddit_id = subreddit_id
def dashboard(): form = forms.DashboardForm(request.form) user = current_user if request.method == 'POST' and form.validate(): user.username = form.username.data user.allow_reddit_notifications = form.allow_reddit_notifications.data if form.age.data: user.age = int(form.age.data) user.gender_id = int(form.gender.data) user.desired_gender_id = int(form.desired_gender.data) user.date_searchable = not form.searchable.data user.min_age = int(form.min_age.data) user.max_age = int(form.max_age.data) user.search_radius = int(form.radius.data) current_user.disable_location = form.disable_location.data if user.disable_location is True: user.latitude = None user.longitude = None user.location = None if form.email.data: user.email = form.email.data else: user.email = None user.bio = form.bio.data favorite_subs = [] favorite_subs.append(form.favorite_sub_1.data) if form.favorite_sub_2.data: favorite_subs.append(form.favorite_sub_2.data) if form.favorite_sub_3.data: favorite_subs.append(form.favorite_sub_3.data) user.unfavorite_all() for sub in favorite_subs: if models.Subreddit.query.filter_by(name=sub).first(): sub = models.Subreddit.query.filter_by(name=sub).first() user.favorite(sub) elif models.Subreddit.query.filter_by(name=sub).first() is None: r = reddit_api.praw_instance() try: r.get_subreddit(sub, fetch=True) except Exception as e: flash(e) return render_template('dashboard.html', title='Reddimatch - My Profile', form=form, page_class='dashboard_page') subreddit = models.Subreddit(name=sub) db.session.add(subreddit) db.session.commit() return render_template('dashboard.html', title='Reddimatch - My Profile', form=form, page_class='dashboard_page') if user.gender_id: form.gender.default = user.gender_id else: form.gender.default = 1 if user.desired_gender_id: form.desired_gender.default = user.desired_gender_id else: form.desired_gender.default = 2 if user.min_age: form.min_age.default = user.min_age else: form.min_age.default = 18 if user.max_age: form.max_age.default = user.max_age else: form.max_age.default = 35 if user.search_radius: form.radius.default = user.search_radius else: form.radius.default = 50 if user.date_searchable is not None: form.searchable.default = not user.date_searchable else: form.searchable.default = False if user.allow_reddit_notifications is not None: form.allow_reddit_notifications.default = user.allow_reddit_notifications else: form.allow_reddit_notifications.default = False if user.location: form.location.default = user.location if user.disable_location == True: form.disable_location.default = True else: form.disable_location.default = False form.process() form.process() return render_template('dashboard.html', page_class='dashboard_page', title='Reddimatch - My Profile',form=form)