File size: 4,153 Bytes
785d91e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import tkinter as tk
from tkinter import ttk, messagebox
import pandas as pd
from ntscraper import Nitter

class HoverButton(tk.Button):
    def __init__(self, master, **kw):
        tk.Button.__init__(self, master=master, **kw)
        self.bind("<Enter>", self.on_enter)
        self.bind("<Leave>", self.on_leave)

    def on_enter(self, e):
        self['background'] = '#4CAF50'

    def on_leave(self, e):
        self['background'] = '#00C853'

class TweetScraperGUI:
    def __init__(self, master):
        self.master = master
        self.master.title("Sargent Twitter Scrapper")

        # Set background image
        self.background_image = tk.PhotoImage(file=r"C:\Users\a\Desktop\background_image.png")
        self.background_label = tk.Label(self.master, image=self.background_image)
        self.background_label.place(relwidth=1, relheight=1)

        self.scraper = Nitter()

        self.create_widgets()

    def create_widgets(self):
        self.hashtag_entry = tk.Entry(self.master)
        self.hashtag_entry.grid(row=0, column=0, padx=5, pady=5)

        # Dropdown list for modes
        self.mode_combo = ttk.Combobox(self.master, values=["term", "hashtag", "user"])
        self.mode_combo.grid(row=0, column=1, padx=5, pady=5)
        self.mode_combo.current(1)  # Set default mode to 'hashtag'

        self.size_entry = tk.Entry(self.master)
        self.size_entry.insert(tk.END, "25")  # Set default size to 25
        self.size_entry.grid(row=0, column=2, padx=5, pady=5)

        self.fetch_button = HoverButton(self.master, text="Fetch Tweets", command=self.fetch_tweets)
        self.fetch_button.grid(row=1, column=0, columnspan=3, padx=5, pady=5, sticky="we")

        self.result_text = tk.Text(self.master, height=20, width=80)
        self.result_text.grid(row=2, column=0, columnspan=3, padx=5, pady=5)

        self.download_button = tk.Button(self.master, text="Download CSV", command=self.download_csv)
        self.download_button.grid(row=3, column=0, columnspan=3, padx=5, pady=5, sticky="we")

        # Set app icon
        self.master.iconbitmap("app_icon.ico")

    def fetch_tweets(self):
        hashtag = self.hashtag_entry.get()
        mode = self.mode_combo.get()
        size = int(self.size_entry.get())

        if hashtag and mode and size:
            tweets_df = self.get_tweets(hashtag, mode, size)
            if tweets_df is not None:
                self.display_tweets(tweets_df)
            else:
                messagebox.showerror("Error", "Failed to fetch tweets.")
        else:
            messagebox.showerror("Error", "Please enter all fields.")

    def get_tweets(self, hashtag, mode, size):
        tweets = self.scraper.get_tweets(hashtag, mode=mode, number=size)
        if tweets:
            final_tweets = []
            for tweet in tweets['tweets']:
                final_tweets.append([tweet['link'], tweet['text'], tweet['date'], tweet['stats']['likes'], tweet['stats']['comments']])
            return pd.DataFrame(final_tweets, columns=['link', 'text', 'date', 'Likes', 'Comments'])
        return None

    def display_tweets(self, tweets_df):
        self.result_text.delete(1.0, tk.END)
        self.result_text.insert(tk.END, tweets_df.to_string(index=False))

    def download_csv(self):
        hashtag = self.hashtag_entry.get()
        mode = self.mode_combo.get()
        size = int(self.size_entry.get())

        if hashtag and mode and size:
            tweets_df = self.get_tweets(hashtag, mode, size)
            if tweets_df is not None:
                file_path = f"{hashtag}_tweets.csv"
                tweets_df.to_csv(file_path, index=False)
                messagebox.showinfo("Download Successful", f"CSV file saved as {file_path}")
            else:
                messagebox.showerror("Error", "Failed to fetch tweets.")
        else:
            messagebox.showerror("Error", "Please enter all fields.")

def main():
    root = tk.Tk()
    app = TweetScraperGUI(root)
    root.mainloop()

if __name__ == "__main__":
    main()