feiyuyuedu.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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 = 'feiyuyuedu'
  9. allowed_domains = ['www.feiyuyuedu.com']
  10. source = 'zy_feiyuyuedu'
  11. source_name = 'feiyuyuedu飞鱼阅读'
  12. source_id = 32
  13. base_url = 'https://www.feiyuyuedu.com/apis/zhiyu/{}.php'
  14. doc = '''
  15. https://www.feiyuyuedu.com/apis/zhiyu/getBookList.php
  16. https://www.feiyuyuedu.com/apis/zhiyu/getBookInfo.php?bookid=520
  17. https://www.feiyuyuedu.com/apis/zhiyu/getChapterList.php?bookid=520
  18. https://www.feiyuyuedu.com/apis/zhiyu/getChapterInfo.php?bookid=520&chapterid=136381
  19. https://www.feiyuyuedu.com/apis/zhiyu/getCateList.php
  20. '''
  21. category = [{
  22. "channel_id": 1,
  23. "channel_name": "男频",
  24. "cate_id": 1,
  25. "cate_name": "幻想异能",
  26. "category_id":"23",
  27. "category_name":"玄幻奇幻"
  28. }, {
  29. "channel_id": 1,
  30. "channel_name": "男频",
  31. "cate_id": 2,
  32. "cate_name": "悬疑灵异",
  33. "category_id":"81",
  34. "category_name":"灵异恐怖"
  35. }, {
  36. "channel_id": 1,
  37. "channel_name": "男频",
  38. "cate_id": 3,
  39. "cate_name": "玄幻奇幻",
  40. "category_id":"23",
  41. "category_name":"玄幻奇幻"
  42. }, {
  43. "channel_id": 1,
  44. "channel_name": "男频",
  45. "cate_id": 4,
  46. "cate_name": "仙侠修真",
  47. "category_id":"23",
  48. "category_name":"玄幻奇幻"
  49. }, {
  50. "channel_id": 1,
  51. "channel_name": "男频",
  52. "cate_id": 5,
  53. "cate_name": "军事热血",
  54. "category_id":"51",
  55. "category_name":"特种军旅"
  56. }, {
  57. "channel_id": 1,
  58. "channel_name": "男频",
  59. "cate_id": 6,
  60. "cate_name": "游戏竞技",
  61. "category_id":"19",
  62. "category_name":"游戏竞技"
  63. }, {
  64. "channel_id": 1,
  65. "channel_name": "男频",
  66. "cate_id": 7,
  67. "cate_name": "科幻未来",
  68. "category_id":"23",
  69. "category_name":"玄幻奇幻"
  70. }, {
  71. "channel_id": 2,
  72. "channel_name": "女频",
  73. "cate_id": 8,
  74. "cate_name": "古代言情",
  75. "category_id":"83",
  76. "category_name":"穿越重生"
  77. }, {
  78. "channel_id": 2,
  79. "channel_name": "女频",
  80. "cate_id": 9,
  81. "cate_name": "现代言情",
  82. "category_id":"98",
  83. "category_name":"婚恋情感"
  84. }, {
  85. "channel_id": 2,
  86. "channel_name": "女频",
  87. "cate_id": 10,
  88. "cate_name": "灵异惊悚",
  89. "category_id":"114",
  90. "category_name":"恐怖惊悚"
  91. }, {
  92. "channel_id": 2,
  93. "channel_name": "女频",
  94. "cate_id": 11,
  95. "cate_name": "仙侠情缘",
  96. "category_id":"97",
  97. "category_name":"古典仙侠"
  98. }, {
  99. "channel_id": 2,
  100. "channel_name": "女频",
  101. "cate_id": 12,
  102. "cate_name": "浪漫校园",
  103. "category_id":"104",
  104. "category_name":"青春校园"
  105. }, {
  106. "channel_id": 2,
  107. "channel_name": "女频",
  108. "cate_id": 13,
  109. "cate_name": "民国年代",
  110. "category_id":"122",
  111. "category_name":"清穿民国"
  112. }, {
  113. "channel_id": 2,
  114. "channel_name": "女频",
  115. "cate_id": 15,
  116. "cate_name": "幻想甜爽",
  117. "category_id":"103",
  118. "category_name":"青春纯爱"
  119. }, {
  120. "channel_id": 1,
  121. "channel_name": "男频",
  122. "cate_id": 16,
  123. "cate_name": "都市生活",
  124. "category_id":"54",
  125. "category_name":"都市爱情"
  126. }, {
  127. "channel_id": 2,
  128. "channel_name": "女频",
  129. "cate_id": 17,
  130. "cate_name": "出版",
  131. "category_id":"107",
  132. "category_name":"其他"
  133. }, {
  134. "channel_id": 1,
  135. "channel_name": "男频",
  136. "cate_id": 18,
  137. "cate_name": "历史生活",
  138. "category_id":"14",
  139. "category_name":"历史穿越"
  140. }, {
  141. "channel_id": 1,
  142. "channel_name": "男频",
  143. "cate_id": 19,
  144. "cate_name": "同人作品",
  145. "category_id":"125",
  146. "category_name":"衍生同人"
  147. }, {
  148. "channel_id": 1,
  149. "channel_name": "男频",
  150. "cate_id": 20,
  151. "cate_name": "出版",
  152. "category_id":"127",
  153. "category_name":"其他作品"
  154. }, {
  155. "channel_id": 2,
  156. "channel_name": "女频",
  157. "cate_id": 21,
  158. "cate_name": "短篇纪实",
  159. "category_id":"107",
  160. "category_name":"其他"
  161. }]
  162. def get_category(category_id):
  163. for item in category:
  164. if int(category_id) == item['cate_id']:
  165. return item
  166. return category[0]
  167. class feiyuyueduProcess():
  168. name = name
  169. allowed_domains = allowed_domains
  170. source = source
  171. source_name = source_name
  172. source_id = source_id
  173. def get_start_url(self):
  174. return base_url.format('getBookList')
  175. def bid_list_result(self, response):
  176. result = json.loads(response.text)
  177. if result is None or result.get('data') is None:
  178. return []
  179. result_list = []
  180. for item in result['data']:
  181. result_list.append({'id': item['id']})
  182. return result_list
  183. def get_book_info_url(self, bid):
  184. return base_url.format('getBookInfo') + '?bookid={}'.format(bid)
  185. def book_info_result(self, response):
  186. result = json.loads(response.text)
  187. result = result['data']
  188. category_info = get_category(result['category_id'])
  189. return {
  190. 'bid': result['id'], 'name': result['booktitle'], 'author': result['author'],
  191. 'intro': result['Introduction'], 'cover': result['cover'], 'keyword': result['Labels'],
  192. 'status': result['state'],
  193. 'category': category_info['category_name'],'category_id':category_info['category_id'],
  194. 'channel': result['channelid']
  195. }
  196. def get_chapter_list_url(self, bid):
  197. return base_url.format('getChapterList') + '?bookid={}'.format(bid)
  198. def chapter_list_result(self, response):
  199. result = json.loads(response.text)
  200. if result is None or result.get('data') is None:
  201. return []
  202. result_list = []
  203. i = 0
  204. for chapter_item in result['data']:
  205. i = i+1
  206. result_list.append({
  207. 'source_chapter_id': chapter_item['id'], 'name': chapter_item['Title'],
  208. 'sequence': chapter_item['Orders'], 'is_vip': chapter_item['isVip'],
  209. 'size': chapter_item['chargeLength'], 'recent_update_at': chapter_item['updateTime']
  210. })
  211. return result_list
  212. def get_chapter_content_url(self, bid, cid):
  213. return base_url.format('getChapterInfo') + '?bookid={}&chapterid={}'.format(bid,cid)
  214. def chapter_content_result(self, response):
  215. result = json.loads(response.text)
  216. if result is None:
  217. return {'content': ''}
  218. return {
  219. 'content': result['data']['content']
  220. }
  221. class feiyuyueduSpider(feiyuyueduProcess,baseSpider):
  222. name = name
  223. custom_settings = {
  224. 'DOWNLOAD_DELAY': 0.1,
  225. 'SOURCE': source,
  226. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  227. }
  228. class feiyuyueduUpdateSpider(feiyuyueduProcess,baseUpdateSpider):
  229. name = name + "update"
  230. custom_settings = {
  231. 'DOWNLOAD_DELAY': 0.1,
  232. 'SOURCE': source,
  233. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  234. }
  235. class feiyuyueduFixSpider(feiyuyueduProcess,fixChapterSpider):
  236. name = name + 'fix'
  237. custom_settings = {
  238. 'DOWNLOAD_DELAY': 0.1,
  239. 'SOURCE': source,
  240. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  241. }
  242. class feiyuyueduBookInfoSpider(feiyuyueduProcess,baseUpdateBookStatusSpider):
  243. name = name + "bookinfo"
  244. custom_settings = {
  245. 'DOWNLOAD_DELAY': 0.1,
  246. 'SOURCE': source,
  247. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  248. }