我试图遍历subreddits,但想忽略顶部的粘贴帖子。我能够打印前5个帖子,不幸的是包括胶粘物。尝试跳过这些的各种pythonic方法都失败了。我的代码的两个不同的例子如下。
subreddit = reddit.subreddit(sub)
for submission in subreddit.hot(limit=5):
# If we haven't replied to this post before
if submission.id not in posts_replied_to:
##FOOD
if subreddit == 'food':
if 'pLEASE SEE' in submission.title:
pass
if "please vote" in submission.title:
pass
else:
print(submission.title)
if re.search("please vote", submission.title, re.IGNORECASE):
pass
else:
print(submission.title)
我注意到文档中有一个粘性标记但不确定如何使用它。任何帮助表示赞赏。
答案 0 :(得分:2)
It looks like you can get the id of a stickied post based on docs。所以也许你可以得到贴合帖子的id(注意,使用粘性方法的'数字'参数,你可以说给我第一个,第二个或第三个,粘贴发布;利用这个来获得所有的粘贴帖子)以及每次提交你要提取的内容,首先根据粘贴的ID检查其ID。
示例:
# assuming there are no more than three stickies...
stickies = [reddit.subreddit("chicago").sticky(i).id for i in range(1,4)]
然后当你想确定给定的帖子没有粘贴时,请使用:
if post.id not in stickies:
do something
看起来,如果少于三个,这会给你一个包含重复ID的列表,这不会成为问题。
答案 1 :(得分:2)
粘贴的提交具有sticked
属性,其评估结果为True
。将以下内容添加到循环中,您应该很高兴。
if submission.stickied:
continue
通常,我建议检查您正在使用的对象的可用属性,以查看是否有可用的东西。请参阅:Determine Available Attributes of an Object
答案 2 :(得分:1)
作为@Al Avery的答案的附录,您可以通过执行类似
之类的操作来完整搜索给定subreddit上所有胶粘物的IDdef get_all_stickies(sub):
stickies = set()
for i in itertools.count(1):
try:
sid = sub.sticky(i)
except pawcore.NotFound:
break
if sid in stickies:
break
stickies.add(sid)
return stickies
此函数考虑到如果向stick
提供了无效索引,则文档会导致错误,而实际行为似乎是返回重复ID。如果你有大量的胶粘物,使用set
而不是列表可以更快地查找。您可以将此功能用作
subreddit = reddit.subreddit(sub)
stickies = get_all_stickies(subreddit)
for submission in subreddit.hot(limit=5):
if submission.id not in posts_replied_to and submission.id not in stickies:
print(submission.title)