Получение объекта сабреддита PRAW из собственной текстовой ссылки на сабреддит

Я использую PRAW с Python, и я хочу иметь возможность:

  1. Просматривайте "новые" сообщения в сабреддите.
  2. Определить, есть ли ссылка на сабреддит в самотексте сообщений
  3. Если есть связанный субреддит, получите этот субреддит как объект PRAW, который будет использоваться позже.

Я могу выполнить шаг 1, но найти, есть ли связанный субреддит, а затем получить этот субреддит, является для меня сложной задачей. Вот что у меня есть на данный момент:

#! python3
# Reply with subreddit info from subreddit in text body

import praw, time

# Bot login details
USERNAME = "AutoMobBot";
PASSWORD = "<redacted>";

UA = "[Subreddit Info Provider (Update 0) by /u/MatthewMob]";
r = praw.Reddit(UA);
r.login(USERNAME, PASSWORD, disable_warning=True);

submissions = r.get_subreddit("matthewmob_csstesting").get_new(limit=10);

for submission in submissions:
    for word in submission.selftext.lower().split():
        if word.startswith("/r/"):
            print("Found subreddit in:", submission.title);
            print(submission.selftext_html);

print("Done...");
input();

Это просто получит материалы, разделит слова в собственном тексте и что-то распечатает, если одно из разделенных слов начинается с /r/, очевидно, что это не будет работать все время, если пользователь, например, только связал сабреддит как r/askreddit или www.reddit.com/r/askreddit. И даже тогда, если бы они связали /r/askreddit/top (с чем-то в конце), как я смогу получить этот субреддит как объект PRAW? Я пытался найти какой-то код регулярного выражения, чтобы помочь мне в этом, но не нашел.

Мой главный вопрос: как лучше всего получить субреддит по ссылке в пользовательском самотексте и как мне это сделать?

Если вам нужны дополнительные разъяснения, я буду рад предоставить дополнительную информацию.


person Matthew W.    schedule 07.06.2016    source источник


Ответы (1)


Я нашел свой ответ сейчас. Вот код, который мне подходит:

#! python3
# Reply with subreddit info from subreddit in text body

import praw, bs4, re
from pprint import pprint

# Bot login details
USERNAME = "AutoMobBot";
PASSWORD = "<Password>";

UA = "[Subreddit Info Provider (Update 4) by /u/MatthewMob]";
r = praw.Reddit(UA);
r.login(USERNAME, PASSWORD, disable_warning=True);

submissions = r.get_subreddit("matthewmob_csstesting").get_new(limit=3);

for submission in submissions:
    subs = [];
    subsfound = -1;
    soup = bs4.BeautifulSoup(submission.selftext_html, "lxml");
    for a in soup.find_all("a", href=True):
        href = a["href"] + "/";
        getsub = re.findall("\/r\/(.*?)\/", href, re.DOTALL);
        if getsub != None:
            if getsub[subsfound] not in subs:
                subs.append(getsub[subsfound]);
                subsfound = subsfound + 1;
                print("\nTitle:", submission.title);
                print("\nSubreddits Found:", subsfound);
                print("\nSubreddit Found:", subs[subsfound] + "\n");

print("Done...");
input();
person Matthew W.    schedule 08.06.2016