nanjingluochen.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. # -*- coding: utf-8 -*-
  2. from content_spider.baseSpider import baseSpider
  3. from content_spider.baseSpider import baseUpdateSpider
  4. from content_spider.baseSpider import fixChapterSpider
  5. from content_spider.baseSpider import baseUpdateBookStatusSpider
  6. import time
  7. import json
  8. name = 'nanjingluochen'
  9. allowed_domains = ['cp.api.luochen.com']
  10. source = 'zy_nanjingluochen'
  11. source_name = '南京落尘'
  12. source_id = 46
  13. base_url = 'http://cp.api.luochen.com/interface/Zhuishuyun/{}'
  14. def get_category(channel,sort_name):
  15. if int(channel) == 0:
  16. if sort_name in ['玄幻','修真','仙侠','武侠','科幻']:
  17. return {'channel_id':1,'category_name':'武侠仙侠','category_id':21}
  18. if sort_name in ['都市','职场','豪门','总裁','青春','纯爱','乡土']:
  19. return {'channel_id':1,'category_name':'都市爱情','category_id':54}
  20. if sort_name in ['架空','穿越','历史','军事']:
  21. return {'channel_id':1,'category_name':'历史穿越','category_id':14}
  22. if sort_name in ['宫斗','宅斗','同人','短篇']:
  23. return {'channel_id':1,'category_name':'其他','category_id':127}
  24. if sort_name == '游戏':
  25. return {'channel_id':1,'category_name':'游戏竞技','category_id':19}
  26. if sort_name == '灵异' or sort_name == '悬疑':
  27. return {'channel_id':1,'category_name':'灵异恐怖','category_id':81}
  28. return {'channel_id':1,'category_name':'都市爱情','category_id':54}
  29. else:
  30. if sort_name in ['婚恋','职场','豪门','总裁']:
  31. return {'channel_id':2,'category_name':'婚恋情感','category_id':98}
  32. if sort_name in ['架空','穿越']:
  33. return {'channel_id':2,'category_name':'穿越重生','category_id':83}
  34. if sort_name in ['宫斗','宅斗']:
  35. return {'channel_id':2,'category_name':'宫斗宅斗','category_id':120}
  36. if sort_name in ['仙侠','修真','玄幻','武侠']:
  37. return {'channel_id':2,'category_name':'东方玄幻','category_id':96}
  38. if sort_name in ['灵异','悬疑']:
  39. return {'channel_id':2,'category_name':'悬疑探险','category_id':113}
  40. if sort_name in ['青春','乡土','纯爱']:
  41. return {'channel_id':2,'category_name':'青春纯爱','category_id':103}
  42. if sort_name in ['历史','同人','短篇']:
  43. return {'channel_id':2,'category_name':'其他','category_id':107}
  44. return {'channel_id':2,'category_name':'婚恋情感','category_id':98}
  45. class nanjingluochenProcess():
  46. name = name
  47. allowed_domains = allowed_domains
  48. source = source
  49. source_name = source_name
  50. source_id = source_id
  51. def get_start_url(self):
  52. return base_url.format('booklist')
  53. def bid_list_result(self, response):
  54. result = json.loads(response.text)
  55. if result is None or result.get('books') is None:
  56. return []
  57. result_list = []
  58. for item in result['books']:
  59. result_list.append({'id': item['bid']})
  60. return result_list
  61. def get_book_info_url(self, bid):
  62. return base_url.format('bookInfo/') + '?bid={}'.format(bid)
  63. def book_info_result(self, response):
  64. result = json.loads(response.text)
  65. category_info = get_category(result['channel'],result['category']);
  66. return {
  67. 'bid': result['id'], 'name': result['title'], 'author': result['author'],
  68. 'intro': result['summary'], 'cover': result['cover'], 'keyword': result['tag'],
  69. 'status': result['isFull'], 'category': category_info['category_name'],'category_id':category_info['category_id'],
  70. 'channel': category_info['channel_id']
  71. }
  72. def get_chapter_list_url(self, bid):
  73. return base_url.format('chapterList/') + '?bid={}'.format(bid)
  74. def chapter_list_result(self, response):
  75. result = json.loads(response.text)
  76. if result is None or result.get('chapters') is None:
  77. return []
  78. result_list = []
  79. i = 0
  80. for chapter_item in result['chapters']:
  81. i = i+1
  82. result_list.append({
  83. 'source_chapter_id': chapter_item['id'], 'name': chapter_item['title'],
  84. 'sequence': chapter_item['chapterOrder'], 'is_vip': chapter_item['isVip'],
  85. 'size': chapter_item['chapterLength'], 'recent_update_at': chapter_item['updatetime']
  86. })
  87. return result_list
  88. def get_chapter_content_url(self, bid, cid):
  89. return base_url.format('chapterContent/') + '?bid={}&cid={}'.format(bid, cid)
  90. def chapter_content_result(self, response):
  91. result = json.loads(response.text)
  92. if result is None:
  93. return {'content': ''}
  94. return {
  95. 'content': result['content']
  96. }
  97. class nanjingluochenSpider(nanjingluochenProcess,baseSpider):
  98. name = name
  99. custom_settings = {
  100. 'DOWNLOAD_DELAY': 0.1,
  101. 'SOURCE': source,
  102. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  103. }
  104. class nanjingluochenUpdateSpider(nanjingluochenProcess,baseUpdateSpider):
  105. name = name + "update"
  106. custom_settings = {
  107. 'DOWNLOAD_DELAY': 0.1,
  108. 'SOURCE': source,
  109. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  110. }
  111. class nanjingluochenFixSpider(nanjingluochenProcess,fixChapterSpider):
  112. name = name + 'fix'
  113. custom_settings = {
  114. 'DOWNLOAD_DELAY': 0.1,
  115. 'SOURCE': source,
  116. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  117. }
  118. class nanjingluochenBookInfoSpider(nanjingluochenProcess,baseUpdateBookStatusSpider):
  119. name = name + "bookinfo"
  120. custom_settings = {
  121. 'DOWNLOAD_DELAY': 0.1,
  122. 'SOURCE': source,
  123. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  124. }