Skip to content
Snippets Groups Projects
Select Git revision
  • 5a27a677cf16bb144b9165741aaef78cf2d52d56
  • main default protected
2 results

tg_hr_check.py

Blame
  • tg_hr_check.py 4.95 KiB
    from src.aichecker.check_tg import *
    from src.aichecker.detectora import query_detectora
    from src.aichecker.aiornot import query_aiornot
    from src.aichecker.transcribe import convert_mp4_to_mp3, convert_ogg_to_mp3
    from ast import literal_eval
    import re
    
    # KONSTANTEN
    N = 100
    DETECTORA_T = 0.8 # 80%
    AIORNOT_T = 0.5 # 50% - AIORNOT selbst setzt den Wert sehr niedrig an.    
    TEST = False
    
    
    # Hilfsfunktion: CSV einlesen und als df ausgeben
    def convert_to_obj(val):
        if pd.isna(val):
            return None
        try:
            return literal_eval(val)
        except (ValueError, SyntaxError):
            return val
    
    
    def reimport_csv(fname):
        df = pd.read_csv(fname)
        # Diese Spalten sind dict:
        structured_columns = ['photo', 'sticker', 'video', 'voice', 'forwards', 'links']
        for c in structured_columns:
            df[c] = df[c].apply(convert_to_obj)
        return df
    
    def is_hr_url(url):
        if 'hr.de' in url:
            return True
        if 'hessenschau.de' in url:
            return True
        if 'hrinforadio.de' in url:
            return True
        return False
    
    def find_links(text):
        # Regex, um Links aus Text zu extrahieren
        if text is None or text=="":
            return []
        urls = re.findall(r'https?://[^\s]+', text)
        return hr_links
    
    if __name__ == "__main__":
        # Datei mit den Channels einlesen
        # Schau, ob es schon Daten gibt
        if not os.path.exists('tg-checks'):
            os.makedirs('tg-checks')
        filename = f'tg-checks/channels.csv'
        if os.path.exists(filename):
            channels_df = pd.read_csv(filename)
            print(f"Config-Datei mit {len(channels_df)} Kanälen")
            channels = channels_df['Kanal'].to_list()
        else:
            channels=['fragunsdochdasoriginal','freiheitffm']
        # Datei mit den Links, auf die geprüft werden soll
        # Durchsucht in den gefunden Links auf diese Strings (naiv).
        #
        # Strings sollten also z.B. hessenschau.de 
        filename = f'tg-checks/checks.csv'
        if os.path.exists(filename):
            checks_df = pd.read_csv(filename)
            checks = checks_df['Kanal'].to_list()
        else:
            channels=['hessenschau.de',
                      'hrinforadio.de',
                      "hr3.de",
                      'hrfernsehen.de',
                      'ardmediathek.hr',
                      'hr.de',
                      ]
        warning_links = []
        for c in channels: 
            existing_df = pd.DataFrame()
            profile = tgc_profile(c)
            if profile is None:
                    print(f"Kein Konto mit dem Namen {c} gefunden.")
            else:
                last_post = profile['n_posts']
                print(f"Analysiert wird: {profile['name']}")
                print(f"{profile['description']}")
                print()
                print(f"Subscriber: {profile['subscribers']}")
                print(f"Posts: {profile['n_posts']}")
                print(f"Fotos: {profile['photos']}")
                print(f"Videos: {profile['videos']}")
                print(f"Links: {profile['links']}")
                print()
                # Schau, ob es schon Daten gibt
                if not os.path.exists('tg-checks'):
                    os.makedirs('tg-checks')
                filename = f'tg-checks/{c}.csv'
                if os.path.exists(filename):
                    existing_df = reimport_csv(filename)
                    start_post = max(existing_df['nr'])
                    print(f"Dieser Kanal wurde schon einmal ausgelesen, zuletzt Post Nr.: {start_post} - seitdem {last_post-start_post} neue Posts")
                else: 
                    start_post = last_post-N
                    print(f"Noch nicht gespeichert. Importiere {N} Posts bis zum letzten: {last_post}.")        
                # Lies die aktuellsten Posts, sichere und analysiere sie
                #
                if start_post < last_post:
                    print(f"Einlesen {start_post+1} bis {last_post}...")
                    posts = tgc_read_range(c, start_post+1, last_post, save=False, describe= False)
                    # Nach hr-Links suchen
                    # Die Posts, die hr-Links enthalten, markieren
                    # und später als Tabelle ausgeben, die dann von einem Watch-Programm 
                    # beobachtet wird
                    alerts=[]
                    for post in posts:
                        # Links gegen Liste prüfen
                        for l in post['links']:
                            for ch in checks:
                                # Taucht der Link in der Liste auf?
                                alert = post
                                # Speichern, was verlinkt wurde
                                alert['alert'] = ch
                                alerts.append(alert)
                    print(f"Neue Alerts: ")
                    for a in alerts:
                        print(a)
                    # Posts anhängen an das csv dieses Kanals
                    alerts_df = pd.DataFrame(alerts)
                    df = pd.DataFrame(posts)
                    df = pd.concat([existing_df, df]).drop_duplicates(subset=['nr']).reset_index(drop=True)
                    df.to_csv(f'tg-checks/{c}.csv', index=False)  # Save to CSV for example
        print("Ende Gelände.")
        df.to_csv(f'tg-checks/alerts.csv', index=False)