Reddit ist eine Website für die Zusammenstellung von Nachrichten, die Bewertung von Webinhalten und Diskussionen. Sie ist aufgrund ihrer großen Nutzerbasis und ihrer Offenheit ein beliebtes Ziel für Bots. Bots werden für eine Vielzahl von Zwecken eingesetzt, einschließlich der automatischen Beantwortung einfacher Fragen. In diesem Tutorial zeige ich Ihnen, wie Sie Reddit-Beiträge mit Python automatisieren können. Dieser Reddit-Bot zieht alle Kommentare aus einem Subreddit und antwortet darauf mit etwas, das wir selbst definieren. Dies ist ein sehr einfacher Reddit-Bot, der nur dazu dient, Ihnen den Einstieg in die Erstellung eines Reddit-Bots mit Python zu erleichtern. Ich werde Ihnen auch zeigen, wie Sie PRAW – Python Reddit API Wrapper in Ihrem Code verwenden können, um Ihr Leben einfacher zu machen.

Voraussetzungen

Praw:

Praw ist eine Open-Source-Code-Bibliothek für Python. Sie bietet eine API, die es Nutzern ermöglicht, mit Reddit in ihren Python-Anwendungen zu interagieren. Sie ist für die Verwendung mit dem OAuth-Autorisierungssystem von Reddit konzipiert und stellt einen Versuch dar, die Verwendung von OAuth zu vereinfachen. Praw ist so konzipiert, dass es nahtlos mit anderen Anwendungen zusammenarbeitet, so dass diese Informationen und Fähigkeiten gemeinsam nutzen können.

Um Praw zu installieren, verwenden Sie den folgenden Befehl in Ihrem Terminal oder der Eingabeaufforderung.

pip install praw

Reddit API-Einrichtung

Um einen Reddit-Bot zu erstellen, werden wir die Reddit-API verwenden, und diese API hat einen Wrapper für Python

Schritt 1:

Rufen Sie den folgenden Link auf und klicken Sie auf 

https://www.reddit.com/prefs/apps

Are you a developer? create an app…

Schritt 2:

Füllen Sie das folgende Formular aus und klicken Sie dann auf „App erstellen“.

Schritt 3:

Jetzt sehen Sie, dass Ihre App erstellt ist und Sie müssen zwei Dinge von hier kopieren, um sie in unserem Code zu verwenden. Es ist für jeden einzigartig, also müssen Sie Ihren eigenen verwenden:

  1. Client_id
  2. Client_secret

Reddit-Instanz erstellen

import praw
reddit = praw.Reddit(
    client_id="Q3dfveBJYo_4FTwIdlKKmQ",
    client_secret="jUAAzmmqe9uVxOBqlJTUoZRxsAvAow",
    user_agent="<1st_bot>",
)
print(reddit.read_only)

Hier haben wir drei Informationen zur Verfügung gestellt:

  1. Client-ID, die wir zuvor von der Reddit-API erhalten haben
  2. Client-Geheimnis, das wir auch von der Reddit-API erhalten haben
  3. Und als Letztes haben wir einen User-Agent, hier muss man etwas Einzigartiges verwenden, das noch niemand zuvor benutzt hat.

Danach können Sie überprüfen, ob Ihre Reddit-API richtig verbunden ist oder nicht.

Ausgabe

Jetzt nehmen wir einen Subreddit von Reddit, den wir die Variable subreddit nennen 

# get subreddit
subreddit = reddit.subreddit("anime")
print(subreddit.display_name)

Ausgabe

Holen wir uns den jüngsten Beitrag aus dem Subreddit:

# you can get whatever amount of the post you want
for post in subreddit.hot(limit=10):
    print(post.title)

Ausgabe

Lassen Sie uns die Kommentare zu den Beiträgen lesen:

import praw

reddit = praw.Reddit(
    client_id="Q3dfveBJYo_4FTwIdlKKmQ",
    client_secret="jUAAzmmqe9uVxOBqlJTUoZRxsAvAow",
    user_agent="<1st_bot>",
)

# get subreddit
subreddit = reddit.subreddit("anime")
print(subreddit.display_name)

# you can get whatever amount of the post you want
for submission in subreddit.hot(limit=10):
    print(submission.title)

    # getting the comment of the post
    for comment in submission.comments:
        print(comment)

Ausgabe

Wie Sie sehen können, wird gerade ein Haufen zufälliger Dinge erfasst, die wir nicht verstehen, weil wir die Daten der Kommentarobjekte ausdrucken.

# you can get whatever amount of the post you want
for submission in subreddit.hot(limit=10):
    print(submission.title)

    # getting the comment of the post
    for comment in submission.comments:
        # here we are defining that if the comment had a body then only print the comment
        if hasattr(comment, "body"):
            print(comment.body)

Ausgabe

Jetzt werden die Kommentare zu dem Beitrag angezeigt. Und jetzt holen wir uns den Kommentar, in dem das Wort „traurig“ vorkommt.

# you can get whatever amount of the post you want
for submission in subreddit.hot(limit=10):

    # getting the comment of the post
    for comment in submission.comments:
        # here we are defining that if the comment had a body then only print the comment
        if hasattr(comment, "body"):
            # converting the comment is lower case
            comment_lower = comment.body.lower()
            if " sad " in comment_lower:
                print("-----------")
                print(comment.body)

Hier werden alle Wörter in einem Kommentar in Kleinbuchstaben umgewandelt, so dass jeder Kommentar, in dem das Wort „traurig“ in Großbuchstaben vorkommt, auch erfasst wird. Dann wird die if-Anweisung verwendet, um uns einen Kommentar zu geben, der nur ein trauriges Wort im Satz enthält. 

Ausgabe

Sie können sehen, dass jeder Kommentar ein trauriges Wort enthält.

Einen Reddit-Bot erstellen

import praw
import random
import time
reddit = praw.Reddit(
    client_id="Q3dfveBJYo_4FTwIdlKKmQ",
    client_secret="jUAAzmmqe9uVxOBqlJTUoZRxsAvAow",
    user_agent="<1st_bot>",
    username='pythonsample',
    password='Python@123'
)

# get subreddit
subreddit = reddit.subreddit("anime")

sad_quotes = [
"Every one of us must do what is in our powers! If we are going to die anyway, then it is better to die fighting than to do nothing!- Sakura Haruno",
"A real ninja is one who endures no matter what gets thrown at him ... All you do need is the guts to never give up. Jiraiya",
"Never underestimate your opponent, no matter how small they may seem.- Shino Aburame"
"Hard work is worthless for those that do not believe in themselves.- Naruto Uzumaki"
"Power is not will, it is the phenomenon of physically making things happen.- Madara Uchiha"
""
]


# you can get whatever amount of the post you want
for submission in subreddit.hot(limit=10):
    # print(submission.title)

    # getting the comment of the post
    for comment in submission.comments:
        # here we are defining that if the comment had a body then only print the comment
        if hasattr(comment, "body"):
            # converting the comment is lower case
            comment_lower = comment.body.lower()
            if " sad " in comment_lower:
                print("-----------")
                print(comment.body)
                # choosing random quote in the list
                random_index = random.randint(0, len(sad_quotes) - 1)
                comment.reply(sad_quotes[random_index])
                # this allows your bot to sleep for 700 seconds
                time.sleep(700)

Hier haben wir zwei neue Bibliotheken hinzugefügt, die erste ist random, um ein zufälliges Zitat aus unserer Liste auszuwählen, und die zweite ist time, weil wir auf den Kommentar zu einer bestimmten Zeit antworten müssen, weil Reddit uns nicht erlaubt, eine Reihe von Kommentaren zur gleichen Zeit zu posten. Dann haben wir die Reddit-Kontonummer und das Passwort eingegeben. Und das war’s.

Hinweis: Wenn du versuchst, etwas zu machen, was nicht in den Reddit-Richtlinien steht, wird dein Bot oder sogar dein Reddit-Konto gesperrt.

Ausgabe:

Letzte Worte

In diesem Blogbeitrag haben wir gelernt, wie man einen Reddit-Bot mithilfe des beliebten Python-Frameworks PRAW erstellt. Wir haben gelernt, wie man sich Zugang zu einem Reddit-Benutzerkonto verschafft, wie man ihre Top-Posts und ihre Kommentare in einem Subreddit findet und wie man auf Kommentare mit einem automatisierten Prozess antwortet. Dies ist kein Top-Level-Bot, aber irgendwo muss man ja anfangen, oder? Wenn Sie Fragen zu diesem Blogbeitrag haben, können Sie unten einen Kommentar hinterlassen oder uns jederzeit kontaktieren.