Het opslaan van Facebook-opmerkingen in een MySQL-database omvat verschillende stappen, waaronder:
1. De Facebook Graph API begrijpen:
* Toegang tot gegevens: De Facebook Graph API is de belangrijkste manier waarop Facebook ontwikkelaars met zijn gegevens kan laten communiceren. Je hebt het nodig om reacties op Facebook-berichten op te halen.
* App-installatie: U moet een Facebook-app maken via het Facebook for Developers-platform ([https://developers.facebook.com/](https://developers.facebook.com/)).
* Rechten: Je app heeft de juiste machtigingen nodig om toegang te krijgen tot reacties. De `read_stream` (verouderd, maar kan nog steeds nodig zijn voor oudere API's) of `public_profile` gecombineerd met functies die beoordeling vereisen zoals `pages_read_engagement` en mogelijk `pages_manage_posts` zijn cruciaal, afhankelijk van de berichten/commentaren die u target. Lees de toestemmingsrichtlijnen van Facebook zorgvuldig. De toegang tot gebruikersgegevens wordt steeds beperkter.
* Toegangstokens: U ontvangt een toegangstoken nadat uw app is geautoriseerd. Dit token fungeert als uw sleutel voor toegang tot de Graph API. Er zijn verschillende soorten tokens (gebruiker, app, pagina). Gebruikerstokens zijn voor acties namens een gebruiker. App-tokens zijn voor acties die verband houden met de app zelf. Paginatokens zijn bedoeld voor het beheren van een Facebook-pagina. Kies degene die geschikt is voor uw gebruiksscenario.
2. Uw MySQL-database instellen:
* Maak een database: Maak een database op uw MySQL-server om de opmerkingen op te slaan (bijvoorbeeld `facebook_comments`).
* Maak een tabel: Maak een tabel om de commentaargegevens te bewaren. Hier is een voorbeeldstructuur:
```sql
MAAK TABEL opmerkingen (
comment_id VARCHAR(255) PRIMAIRE SLEUTEL, -- Facebook's unieke ID voor de reactie
post_id VARCHAR(255), -- Facebook's unieke ID voor het bericht
user_id VARCHAR(255), -- Facebook's unieke ID voor de reageerder
gebruikersnaam VARCHAR(255), -- Naam van de reageerder
bericht TEXT, -- De commentaartekst
create_time DATETIME, -- Tijdstempel van wanneer de opmerking is gemaakt
likes INT DEFAULT 0, -- Aantal likes (als je dit opslaat)
antwoorden INT DEFAULT 0, -- Aantal antwoorden (als u dit opslaat)
FOREIGN KEY (post_id) REFERENTIES posts(post_id) ON DELETE CASCADE, -- Optioneel:link naar een 'posts'-tabel
FOREIGN KEY (user_id) REFERENTIES gebruikers (user_id) ON DELETE SET NULL -- Optioneel:link naar een 'users'-tabel
);
MAAK TABEL berichten (
post_id VARCHAR(255) PRIMAIRE SLEUTEL, -- Facebook's unieke ID voor het bericht
bericht TEXT, -- De berichttekst
create_time DATETIME, -- Tijdstempel van wanneer het bericht is gemaakt
...andere berichtgegevens...
);
CREATE TABLE-gebruikers (
user_id VARCHAR(255) PRIMAIRE SLEUTEL, -- Facebook's unieke ID voor de gebruiker
gebruikersnaam VARCHAR(255), -- De gebruikersnaam
...andere gebruikersgegevens...
);
```
* Gegevenstypen: `VARCHAR(255)` is geschikt voor de meeste ID's en namen. `TEXT` is voor langere commentaarinhoud. `DATETIME` slaat de tijdstempels op.
* Primaire sleutel: `comment_id` zou de primaire sleutel moeten zijn, omdat dit de unieke identificatie is voor elke opmerking. Op dezelfde manier zijn 'post_id' en 'user_id' primaire sleutels in hun respectievelijke tabellen.
* Buitenlandse sleutels (optioneel maar aanbevolen): Gebruik externe sleutels om de tabel 'comments' te koppelen aan andere tabellen, zoals 'posts' en 'users'. Dit helpt de gegevensintegriteit te behouden en maakt het opvragen eenvoudiger. `ON DELETE CASCADE` betekent dat als u een bericht verwijdert, alle bijbehorende opmerkingen ook worden verwijderd. `ON DELETE SET NULL` betekent dat als een gebruiker wordt verwijderd, de `user_id` in de `comments` tabel wordt ingesteld op NULL.
* Indexen: Overweeg het toevoegen van indexen aan vaak opgevraagde kolommen (bijvoorbeeld 'post_id', 'user_id', 'created_time') om de queryprestaties te verbeteren.
3. De code schrijven (voorbeeld met Python):
```python
Facebook importeren
importeer mysql.connector
json importeren
Facebook API-inloggegevens
FACEBOOK_APP_ID ="UW_APP_ID"
FACEBOOK_APP_SECRET ="UW_APP_SECRET"
ACCESS_TOKEN ="YOUR_ACCESS_TOKEN" # Het beste is om een token met een lange levensduur te gebruiken
MySQL-databasegegevens
MYSQL_HOST ="lokalehost"
MYSQL_USER ="uw_mysql_user"
MYSQL_PASSWORD ="uw_mysql_wachtwoord"
MYSQL_DATABASE ="facebook_comments"
def connect_to_mysql():
poging:
mijndb =mijnsql.connector.connect(
host=MYSQL_HOST,
gebruiker=MYSQL_USER,
wachtwoord=MYSQL_PASSWORD,
database=MYSQL_DATABASE
)
retourneer mydb
behalve mysql.connector.Error als fout:
print(f"Fout bij verbinding maken met MySQL:{err}")
retour Geen
def get_facebook_comments(post_id):
""Haalt reacties op van een Facebook-bericht met behulp van de Graph API."""
poging:
graph =facebook.GraphAPI(access_token=ACCESS_TOKEN, versie ="v19.0") # Specificeer API-versie
commentaren =graph.get_connections(id=post_id, connection_name='comments', field='id,message,created_time,from{id,name},like_count') # Geef velden op die moeten worden opgehaald
all_comments =[] # Lijst om alle opmerkingen van alle pagina's op te slaan
terwijl waar:
poging:
all_comments.extend(comments['data']) # Voeg commentaar toe vanaf de huidige pagina
# Probeer een verzoek in te dienen voor de volgende pagina met gegevens, als deze bestaat.
commentaren =graph.get_page(comments['paging']['volgende'])
behalve KeyError:
# Wanneer er geen pagina's meer zijn (['paging']['next'] bestaat niet), breek de lus af.
pauze
retourneer alle_opmerkingen
behalve facebook.GraphAPIERror als e:
print(f"Fout bij ophalen van commentaar voor bericht {post_id}:{e}")
retour Geen
def insert_comment_into_db(mijndb, commentaar):
"""Voegt een opmerking in de MySQL-database in."""
poging:
mijncursor =mijndb.cursor()
sql ="""
INSERT INTO reacties (comment_id, post_id, user_id, user_name, message, create_time, likes)
WAARDEN (%s, %s, %s, %s, %s, %s, %s)
"""
waarden =(
commentaar['id'],
comment['post_id'], # Ervan uitgaande dat je de post_id aan het commentaarwoordenboek hebt toegevoegd
commentaar['van']['id'],
commentaar['van']['naam'],
commentaar['bericht'],
commentaar['gemaakte_tijd'],
comment.get('like_count', 0) # Gebruik .get() om ontbrekende 'like_count' af te handelen
)
mijncursor.execute(sql, waarden)
mijndb.commit()
print(f"Ingevoegde opmerking:{commentaar['id']}")
behalve mysql.connector.Error als fout:
print(f"Fout bij het invoegen van commentaar {commentaar['id']}:{err}")
mydb.rollback() # Terugdraaien in geval van een fout
def hoofd():
"""Hoofdfunctie om opmerkingen op te halen en op te slaan in de database."""
mijndb =connect_to_mysql()
zo niet mydb:
opbrengst
post_ids =["POST_ID_1", "POST_ID_2", "POST_ID_3"] # Vervangen door daadwerkelijke bericht-ID's
voor post_id in post_ids:
reacties =get_facebook_comments(post_id)
indien opmerkingen:
voor commentaar in reacties:
comment['post_id'] =post_id # Voeg de post_id toe aan het commentaarwoordenboek
insert_comment_into_db(mijndb, commentaar)
mijndb.close()
als __naam__ =="__hoofd__":
voornaamst()
```
Uitleg van de code:
* Afhankelijkheden:
* `facebook-sdk`:Installeer met `pip install facebook-sdk`
* `mysql-connector-python`:installeer met `pip install mysql-connector-python`
* Inloggegevens: Vervang `YOUR_APP_ID`, `YOUR_APP_SECRET`, `YOUR_ACCESS_TOKEN`, `your_mysql_user`, `your_mysql_password`, `facebook_comments` en de tijdelijke aanduidingen voor `POST_ID` door uw daadwerkelijke inloggegevens en bericht-ID's.
* `connect_to_mysql()`: Brengt een verbinding tot stand met uw MySQL-database. Verwerkt mogelijke verbindingsfouten.
* `get_facebook_comments(post_id)`:
* Maakt verbinding met de Facebook Graph API met behulp van uw toegangstoken.
* Gebruikt `graph.get_connections()` om commentaar op te halen voor een gegeven `post_id`. De `connection_name='comments'` vertelt de API om opmerkingen op te halen. De parameter `fields` specificeert welke velden uit elke opmerking moeten worden opgehaald (verminder onnodige gegevensoverdracht).
* Verzorgt paginering. De Facebook Graph API retourneert gegevens in pagina's. De code doorloopt alle pagina's met opmerkingen met behulp van de 'paging'-informatie. Dit is cruciaal voor berichten met veel reacties.
* Foutafhandeling bij gebruik van `try...except facebook.GraphAPIERror`.
* `insert_comment_into_db(mijndb, commentaar)`:
* Bereidt een SQL `INSERT`-instructie voor met tijdelijke aanduidingen (`%s`). Dit is de beste manier om kwetsbaarheden in SQL-injectie te voorkomen.
* Creëert een 'waarden'-tuple die de gegevens bevat die moeten worden ingevoegd.
* Voert de SQL-instructie uit met behulp van `mycursor.execute(sql, waarden)`.
* Voert de wijzigingen door in de database met behulp van `mydb.commit()`.
* Verwerkt potentiële MySQL-fouten met `try...except mysql.connector.Error` en draait de transactie terug met `mydb.rollback()` als er een fout optreedt.
* `main()`:
* Maakt verbinding met de database.
* Loopt door een lijst met `post_ids`.
* Roept `get_facebook_comments()` aan om commentaar voor elk bericht op te halen.
* Doorloopt de opgehaalde commentaren en roept `insert_comment_into_db()` aan om ze in de database op te slaan.
* Sluit de databaseverbinding.
* `if __name__ =="__main__":`: Dit zorgt ervoor dat de functie `main()` alleen wordt uitgevoerd wanneer het script rechtstreeks wordt uitgevoerd (niet wanneer het als module wordt geïmporteerd).
Belangrijke overwegingen:
* Toegangstokens:
* Gebruikerstokens: Goed voor acties namens een gebruiker. Ze vervallen. U kunt ze verlengen, maar u moet nog steeds opnieuw autoriseren.
* Paginatokens: Nodig om een Facebook-pagina te beheren. Je krijgt deze via een User Token met de toestemming `manage_pages`. Vervolgens kunt u de User Token inwisselen voor een Page Token. Deze hebben een *langere levensduur*, maar kunnen nog steeds verlopen.
* App-tokens: Hoofdzakelijk voor app-instellingen en analyses. Niet voor directe toegang tot gebruikersgegevens.
* Langlevende tokens: Facebook biedt de mogelijkheid om tokens met een korte levensduur in te wisselen voor tokens met een lange levensduur. Dit is essentieel voor achtergrondprocessen.
* Tokenbeheer: Implementeer goed tokenbeheer in uw applicatie. Bewaar tokens veilig en vernieuw ze indien nodig.
* Snelheidslimiet: Facebook handhaaft tarieflimieten om misbruik van de API te voorkomen. Uw code *moet* omgaan met snelheidsbeperkingen. Als u de limieten overschrijdt, worden uw verzoeken beperkt (vertraagd) of geblokkeerd. De API biedt headers die de snelheidslimietstatus aangeven (bijvoorbeeld `x-app-usage`). Implementeer logica voor nieuwe pogingen met exponentiële uitstel om snelheidsbeperkingen netjes af te handelen. De `facebook-sdk` biedt mogelijk enkele ingebouwde mechanismen voor opnieuw proberen.
* Foutafhandeling: Robuuste foutafhandeling is van cruciaal belang. De Facebook Graph API kan verschillende foutcodes retourneren. Handel deze fouten op de juiste manier af (log bijvoorbeeld de fout, probeer het verzoek opnieuw, breng de beheerder op de hoogte).
* Gegevensprivacy: Wees uiterst voorzichtig bij het omgaan met gebruikersgegevens. Voldoen aan het ontwikkelaarsbeleid van Facebook en de regelgeving inzake gegevensprivacy (bijvoorbeeld AVG, CCPA). Verkrijg de noodzakelijke toestemming van gebruikers voordat u hun gegevens verzamelt. Sla gegevens veilig op.
* Facebook API-wijzigingen: De Facebook Graph API kan worden gewijzigd. Blijf op de hoogte van de nieuwste API-documentatie en aankondigingen. Test uw code regelmatig om er zeker van te zijn dat deze nog correct werkt. Facebook beëindigt regelmatig oudere versies van de API.
* Asynchrone verwerking: Als u een groot aantal opmerkingen moet verwerken, overweeg dan om asynchrone verwerking te gebruiken (bijvoorbeeld door een takenwachtrij zoals Celery of Redis Queue te gebruiken) om te voorkomen dat uw hoofdtoepassingsthread wordt geblokkeerd.
* Delta API (voor bijna realtime updates): Voor het voortdurend monitoren van nieuwe reacties is de Delta API (onderdeel van de Graph API) nuttig. Hiermee kunt u alleen de wijzigingen (nieuwe opmerkingen, verwijderde opmerkingen, bijgewerkte opmerkingen) ophalen sinds de laatste keer dat u dit controleerde. Dit is efficiënter dan het herhaaldelijk ophalen van alle opmerkingen.
* Filteren en zoeken (Graph API-mogelijkheden): Ontdek de filter- en zoekmogelijkheden van de Graph API. U kunt deze gebruiken om opmerkingen op te halen op basis van specifieke criteria (bijvoorbeeld opmerkingen die bepaalde trefwoorden bevatten).
* Databaseoptimalisatie: Optimaliseer uw databaseschema en query's voor prestaties. Gebruik de juiste indexen, partities en caching.
Vereenvoudigde stroom:
1. App-installatie: Maak een Facebook-app en verkrijg de benodigde machtigingen.
2. Toegangstoken: Verkrijg een toegangstoken met een lange levensduur.
3. Databaseverbinding: Maak verbinding met uw MySQL-database.
4. Post-ID's ophalen: Bepaal van welke Facebook-berichten je reacties wilt ophalen.
5. Opmerkingen ophalen: Gebruik de Graph API om reacties voor elk bericht op te halen. Beheer paginering en snelheidsbeperking.
6. Gegevenstransformatie: Transformeer de commentaargegevens naar een formaat dat geschikt is voor uw database. Voeg de bericht-ID toe aan elke opmerking.
7. Invoegen in database: Voeg de commentaargegevens in de tabel 'opmerkingen' in. Gebruik geparametriseerde query's om SQL-injectie te voorkomen.
8. Foutafhandeling: Implementeer uitgebreide foutafhandeling gedurende het hele proces.
9. Tokenbeheer: Bewaar en vernieuw het toegangstoken veilig.
Deze uitgebreide gids zou u moeten helpen Facebook-opmerkingen met succes op te slaan in uw MySQL-database. Vergeet niet om tijdens het ontwikkelingsproces prioriteit te geven aan gegevensprivacy en -beveiliging. Succes! |