Transfert sommaire vers base de données fonctionnel
parent
ebae9e4b12
commit
ca2470bb32
|
|
@ -5,7 +5,50 @@
|
|||
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
|
||||
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
|
||||
|
||||
import psycopg2
|
||||
from config_db import DATABASE as DB
|
||||
from FMScraper.items import show_Item, episode_Item
|
||||
|
||||
class FmscraperPipeline(object):
|
||||
def open_spider(self, spider):
|
||||
|
||||
# Connexion BDD
|
||||
hostname = DB['HOST']
|
||||
username = DB['USER']
|
||||
password = DB['PASSWORD']
|
||||
database = DB['DB_NAME']
|
||||
self.connection = psycopg2.connect(host=hostname, user=username, password=password, dbname=database)
|
||||
self.cur = self.connection.cursor()
|
||||
|
||||
def close_spider(self, spider):
|
||||
# Fermeture de la connexion à la BDD
|
||||
self.cur.close()
|
||||
self.connection.close()
|
||||
|
||||
def process_item(self, item, spider):
|
||||
|
||||
if isinstance(item, show_Item):
|
||||
# Ajouter l'émission à la table Emission
|
||||
# Vérifier existence de l'émission via URL_page
|
||||
# champs nom, urlpage, urlrss, genre, producteur
|
||||
self.cur.execute("INSERT INTO emission (nom, url_page, url_rss) VALUES (%s, %s, %s) RETURNING id", (item['name'], item['url_page'], item['url_feed']))
|
||||
self.emission_id = self.cur.fetchone()[0]
|
||||
# self.connection.commit()
|
||||
|
||||
if isinstance(item, episode_Item):
|
||||
# Vérifier l'existence de l'episode via ID_episode
|
||||
# Ajouter l'épisode à la table Episode (avec l'émission associée en clé étrangère)
|
||||
self.cur.execute("INSERT INTO episode (titre, description_lead, description_full, id_episode_site, emission_id) VALUES (%s, %s, %s, %s, %s) RETURNING id", (item['title'], item['description_lead'], item['description_full'], item['id_episode'], self.emission_id))
|
||||
episode_id = self.cur.fetchone()[0]
|
||||
self.connection.commit()
|
||||
|
||||
# Faire le lien episode -> emission via le nom de l'emission
|
||||
# Récupérer l'ID de l'entrée emission généré
|
||||
|
||||
# Ajouter les infos de fichier dans la table Media
|
||||
self.cur.execute("INSERT INTO media (url_file, filename_orig, size, episode_id) VALUES (%s, %s, %s, %s) RETURNING id", (item['url_file'], item['url_file'], item['file_size'], episode_id))
|
||||
self.connection.commit()
|
||||
# Vérifier l'existence du fichier via url et taille du fichier, passer si correspondance existante
|
||||
|
||||
|
||||
return item
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
## Tables de la base RFScraper
|
||||
CREATE TABLE station(
|
||||
id serial PRIMARY KEY,
|
||||
nom text UNIQUE NOT NULL,
|
||||
url text UNIQUE NOT NULL
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
DATABASE = {
|
||||
'HOST' : 'hostname',
|
||||
'USER' : 'user',
|
||||
'PASSWORD' : 'password',
|
||||
'DB_NAME' : 'database name'
|
||||
}
|
||||
Loading…
Reference in New Issue