import facebook
from datetime import datetime
import pandas as pd

def get_facebook_posts(access_token, page_id, max_posts=100):
    """
    Recupera i post da una pagina Facebook e li salva in CSV e JSON.
    
    Parameters:
    access_token (str): Token di accesso Facebook
    page_id (str): ID della pagina Facebook
    max_posts (int): Numero massimo di post da recuperare
    """
    # Inizializza la connessione con Facebook
    graph = facebook.GraphAPI(access_token=access_token, version="3.1")
    
    # Lista per salvare tutti i post
    all_posts = []
    
    try:
        # Prima chiamata per ottenere i post
        posts = graph.get_connections(
            page_id, 
            'posts',
            fields='message,created_time,type,shares,reactions.summary(total_count),comments.summary(total_count)'
        )
        
        # Continua a recuperare post finché ci sono dati disponibili
        while posts.get('data') and len(all_posts) < max_posts:
            for post in posts['data']:
                post_data = {
                    'post_id': post.get('id'),
                    'message': post.get('message', ''),
                    'created_time': post.get('created_time'),
                    'type': post.get('type'),
                    'shares': post.get('shares', {}).get('count', 0),
                    'reactions': post.get('reactions', {}).get('summary', {}).get('total_count', 0),
                    'comments': post.get('comments', {}).get('summary', {}).get('total_count', 0)
                }
                all_posts.append(post_data)
                
                if len(all_posts) >= max_posts:
                    break
            
            # Controlla se ci sono altri post da recuperare
            if 'paging' in posts and 'next' in posts['paging']:
                posts = requests.get(posts['paging']['next']).json()
            else:
                break
                
        # Salva i dati in formato JSON
        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
        json_filename = f'facebook_posts_{timestamp}.json'
        with open(json_filename, 'w', encoding='utf-8') as f:
            json.dump(all_posts, f, ensure_ascii=False, indent=4)
            
        # Salva i dati in formato CSV
        csv_filename = f'facebook_posts_{timestamp}.csv'
        df = pd.DataFrame(all_posts)
        df.to_csv(csv_filename, index=False, encoding='utf-8')
        
        print(f"Salvati {len(all_posts)} post in {json_filename} e {csv_filename}")
        
    except facebook.GraphAPIError as e:
        print(f"Errore nell'accesso all'API di Facebook: {str(e)}")
    except Exception as e:
        print(f"Errore generico: {str(e)}")

# Esempio di utilizzo
if __name__ == "__main__":
    ACCESS_TOKEN = "16345e60338a0202d027d4e376cf587c"
    PAGE_ID = "100064713757057"
    get_facebook_posts(ACCESS_TOKEN, PAGE_ID)
