import sqlite3
import datetime
from scrapy.exceptions import DropItem
from itemadapter import ItemAdapter


class SportsscrapperPipeline:
    # 초기화 메소드
    def __init__(self):
        # DB 설정(자동 커밋)
        # isolation_level=None => Auto Commit
        self.conn = sqlite3.connect('/mydjango/db.sqlite3', isolation_level=None)

        # DB 연결
        self.c = self.conn.cursor()

    # 최초 1회 실행
    def open_spider(self, spider):
        spider.logger.info('NewsSpider Pipeline Started.')
        self.c.execute("CREATE TABLE IF NOT EXISTS data_sports(id INTEGER PRIMARY KEY AUTOINCREMENT, title text, preview text, crawled_time text)")
        self.c.execute("DELETE FROM data_sports")

    # Item 건수 별 실행
    def process_item(self, item, spider):
        if not item.get('title') is None:
            # 삽입 시간
            crawled_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

            # 크롤링 시간 필드 추가
            item['crawled_time'] = crawled_time

            # 데이터 -> DB 삽입
            # tuple(item[k] for k in item.keys()) 로 대신해도 된다.
            self.c.execute('INSERT INTO data_sports(title,preview,crawled_time) VALUES(?, ?, ?);', (item.get('title'), item.get('preview'), item.get('crawled_time'))) # tuple(item[k] for k in item.keys())

            # 로그
            spider.logger.info('Item to DB inserted.')

            # 결과 리턴
            return item
        else:
            raise DropItem('Dropped Item. Because This Contents is Empty.')

    # 마지막 1회 실행
    def close_spider(self, spider):
        spider.logger.info('NewsSpider Pipeline Stopped.')

        # commit(auto commit으로 설정했지만 혹시 모르니)
        self.conn.commit()

        # 연결 해제
        self.conn.close()
