def extractFeatureToDB(self, beginWeek, endWeek=datetime.today(), isReload=False, useAlchemyAPI=False):
     if beginWeek < datetime(2007, 1, 7) or endWeek > datetime.today():
         raise Exception('Invalid input date!')
     beginWeek, endWeek = dateToSaturday(beginWeek), dateToSaturday(endWeek)
     endWeek = endWeek - timedelta(days=7) if endWeek > datetime.today() else endWeek
     iterWeek = beginWeek
     db = DBController()
     while iterWeek <= endWeek:
         lastWeek = iterWeek - timedelta(days=7)
         songRankList = db.getSongIdListByWeek(lastWeek)
         for songId in songRankList:
             if isReload == False and db.isFeatureInDB(iterWeek, songId):
                 continue
             featureDict = {}
             featureDict['id'] = songId
             featureDict['week'] = iterWeek
             featureDict['sales'] = db.getSalesRank(lastWeek, songId)
             featureDict['radio'] = db.getRadioRank(lastWeek, songId)
             featureDict['streaming'] = db.getStreamingRank(lastWeek, songId)
             featureDict['MVView'], featureDict['MVSocialInteraction'] = db.getIMVDBData(iterWeek, songId)
             featureDict['MTVReviewCount'], featureDict['MTVReviewScore'] = db.getMTVReviewData(iterWeek, songId, useAlchemyAPI) 
             featureDict['youtubeCommentCount'], featureDict['youtubeCommentScore'] = db.getYoutubeData(iterWeek, songId, useAlchemyAPI)
             featureDict['twitterCount'], featureDict['twitterScore'] = db.getTwitterData(iterWeek, songId, useAlchemyAPI)
             featureDict['rank'] = db.getTop50Rank(iterWeek, songId)
             db.insertFeatureToDB(featureDict)
         iterWeek += timedelta(days=7)