Пример #1
0
def get_system_default_avatar_url():
    """
    返回系统默认的头像url地址
    :return:
    """
    from conf.cm import ConfigManager
    cm = ConfigManager()
    avatar_url = "http://" + cm.get_config('host') + ":" + str(cm.get_config('port')) + cm.get_config('upload')['visit']['avatar'] + 'default.png'
    return avatar_url
Пример #2
0
 def __init__(self):
     cm = ConfigManager()
     db_config = cm.get_dbconfig()
     self.conn_r = MySQLdb.connect(
         host=db_config['host'],
         user=db_config['user'],
         passwd=db_config['passwd'],
         db=db_config['db'],
         charset=db_config['charset']
     )
Пример #3
0
def save_file(file_name, file_content, dir_type):
    """
    保存文件到本地
    :param file_name: 文件名
    :param file_content: 文件内容
    :param dir_type: 保存路径类型 (1: avatar 2: question_pic 3: question_sound)
    :return:
    """
    from conf.cm import ConfigManager
    cm = ConfigManager()
    if dir_type == 1:
        upload_dir = cm.get_config('upload')['save']['avatar']
        url = cm.get_config('upload')['visit']['avatar']
    elif dir_type == 2:
        upload_dir = cm.get_config('upload')['save']['pic']
        url = cm.get_config('upload')['visit']['pic']
    elif dir_type == 3:
        upload_dir = cm.get_config('upload')['save']['sound']
        url = cm.get_config('upload')['visit']['sound']
    output_file = open(upload_dir + file_name, 'wb')
    output_file.write(file_content)
    output_file.flush()
    output_file.close()

    return url + file_name
Пример #4
0
class DataProcedure():
    def __init__(self):
        self.cm = ConfigManager()
        self.db = DBManager()

    def __del__(self):
        self.db.close()

    def run(self):
        sql = self.get_sql()
        queue_data = self.cm.get_config('taskqueue')['data']
        queue_back = self.cm.get_config('taskqueue')['backup']
        r = redis.Redis(
            host=self.cm.get_config('redis')['host'],
            port=self.cm.get_config('redis')['port']
        )
        if not r:
            print 'Redis服务未启动'
        else:
            print 'Redis服务正常'
            # 处理当前任务
            cur_task = r.rpoplpush(queue_data, queue_back)
            while cur_task is not None:
                # print cur_task
                is_success, rows = self.db.save(sql, eval(cur_task))
                if is_success:
                    # 提交成功, 清空备份队列
                    r.delete(queue_back)
                cur_task = r.rpoplpush(queue_data, queue_back)
            print '队列中没有要处理的任务'

    def get_sql(self):
        table_name = '%sresult' % self.cm.get_config('table')[0]['song']['prefix']
        sql_data_save = ("INSERT INTO %s " % table_name) + "(`sid`, `author`, `sname`, `counts`, `durl`) " \
                                                           "VALUES (%s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE " \
                                                           "counts=counts+1;"
        return sql_data_save
Пример #5
0
 def __init__(self):
     self.cm = ConfigManager()
     self.db = DBManager()
Пример #6
0
class Baidu():
    def __init__(self):
        self.cm = ConfigManager()
        self.db = DBManager()

    def __del__(self):
        self.db.close()

    def get_song_nums(self, *args, **kwargs):
        """
        获取实际歌曲数,存在同歌曲名,不同sid的情形,故需要去重
        :param args: 查询的集合域
        :param kwargs: 过滤条件,可以取值歌手,歌名或者其他
        :return:
        """
        table = '%sresult' % self.cm.get_config('table')[0]['song']['prefix']
        category = ', '.join(args)
        filter_key = kwargs.keys()[0]
        filter_value = kwargs.get(filter_key)
        sql_search = ('SELECT COUNT(DISTINCT %s) FROM %s ' % (category, table)) + 'WHERE %s = \'%s\'' % (filter_key,
                                                                                                         filter_value)
        data = self.db.query(sql_search)
        return data[0][0]

    def searchBySinger(self, singer):
        """
        根据歌曲名称查询
        优先搜索数据库, 若找到, 直接返回该数据
        提示用户是否仍要继续下载
        否则, 联网搜索, 并将新数据存入数据库
        :param singer: 歌手
        :return:
        """
        table = '%sresult' % self.cm.get_config('table')[0]['song']['prefix']
        sql_search = ('SELECT sname, durl FROM %s ' % table) + 'WHERE author = \'%s\'' % singer
        data = self.db.query(sql_search)
        size = self.get_song_nums('sname', author=singer)
        print('数据库目前收录%d首' % size)
        print '分别有:'
        for l in data:
            print(l[0])
        print('是否开始下载?(y/n)')
        choice = raw_input()
        if choice == 'y':
            base_dir = self.cm.get_config('dir')['path']
            download.download_with_singer(data, base_dir, singer, size)
        else:
            print '已取消下载'

    def searchBySname(self, song, singer=None):
        """
        提供对外调用的接口, 接受歌曲名作为参数
        :param song: 歌曲名
        :param singer: 歌手名(选项)
        :return:
        """
        table = '%sresult' % self.cm.get_config('table')[0]['song']['prefix']
        sql_search = ('SELECT author, durl FROM %s ' % table) + 'WHERE sname = \'%s\'' % song
        data = self.db.query(sql_search)
        size = self.get_song_nums('author', sname=song)
        print('数据库目前收录%d首' % size)
        print '分别有:'
        for l in data:
            print(l[0])
        print('是否开始下载?(y/n)')
        choice = raw_input()
        if choice == 'y':
            base_dir = self.cm.get_config('dir')['path']
            download.download_with_sname(song, data, base_dir)
        else:
            print '已取消下载'
Пример #7
0
# coding: utf-8

import build.setup as setup
from api.baidu import Baidu
from task.dataprocessor import DataProcedure
from lib.songcrawler import Crawler
import build.clean as clean
from conf.cm import ConfigManager
cm = ConfigManager()

if __name__ == '__main__':
    setup.setup_env()
    clean.cleanup()
    # targets = cm.get_config('target')['authors']
    # for author in targets:
    #     tmp = author.decode('utf-8')
    #     print u'开始下载%s的歌曲' % tmp
    #     Crawler().get_url_by_singer(author)
    #     DataProcedure().run()
    #     Baidu().searchBySinger(tmp)
    # 测试get_url_by_sname功能
    Crawler().get_url_by_sname('当爱已成往事')
    DataProcedure().run()
    Baidu().searchBySname(u'当爱已成往事')