feiyuyuedu.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. # -*- coding: utf-8 -*-
  2. from content_spider.simpleSpider import simpleProcess
  3. from content_spider.simpleSpider import simpleProcessSpider
  4. from content_spider.simpleSpider import simpleProcessupdateSpider
  5. from content_spider.simpleSpider import simpleProcessfixSpider
  6. from content_spider.simpleSpider import simpleProcessBookInfoSpider
  7. import json
  8. name = 'feiyuyuedu'
  9. allowed_domains = ['www.feiyuyuedu.com']
  10. source = 'feiyuyuedu'
  11. source_name = '飞鱼'
  12. source_id = 21
  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 item[0]
  167. class feiyuyueduProcess(simpleProcess):
  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. return simpleProcess.bid_list_result(response=response)
  177. def get_book_info_url(self, bid):
  178. return base_url.format('getBookInfo') + '?bookid={}'.format(bid)
  179. def book_info_result(self, response):
  180. result = json.loads(response.text)
  181. result = result['data']
  182. category_info = get_category(result['category'])
  183. return {
  184. 'bid': result['id'], 'name': result['booktitle'], 'author': result['author'],
  185. 'intro': result['Introduction'], 'cover': result['cover'], 'keyword': result['Labels'],
  186. 'status': result['state'],
  187. 'category': category_info['category_name'],'category_id':category_info['category_id'],
  188. 'channel': category_info['channelid']
  189. }
  190. def get_chapter_list_url(self, bid):
  191. return base_url.format('getChapterList') + '?bookid={}'.format(bid)
  192. def chapter_list_result(self, response):
  193. result = json.loads(response.text)
  194. if result is None or result.get('data') is None:
  195. return []
  196. result_list = []
  197. i = 0
  198. for chapter_item in result['data']:
  199. i = i+1
  200. result_list.append({
  201. 'source_chapter_id': chapter_item['id'], 'name': chapter_item['Title'],
  202. 'sequence': chapter_item['Orders'], 'is_vip': chapter_item['isVip'],
  203. 'size': chapter_item['chargeLength'], 'recent_update_at': chapter_item['updateTime']
  204. })
  205. return result_list
  206. def get_chapter_content_url(self, bid, cid):
  207. return base_url.format('getChapterInfo') + '?bookid={}&chapterid={}'.format(bid,cid)
  208. def chapter_content_result(self, response):
  209. result = json.loads(response.text)
  210. if result is None:
  211. return {'content': ''}
  212. return {
  213. 'content': result['data']['content']
  214. }
  215. class feiyuyueduSpider(feiyuyueduProcess,simpleProcessSpider):
  216. name = name
  217. allowed_domains = allowed_domains
  218. source = source
  219. source_name = source_name
  220. source_id = source_id
  221. class feiyuyueduUpdateSpider(feiyuyueduProcess,simpleProcessupdateSpider):
  222. name = name + "update"
  223. allowed_domains = allowed_domains
  224. source = source
  225. source_name = source_name
  226. source_id = source_id
  227. class feiyuyueduFixSpider(feiyuyueduProcess,simpleProcessfixSpider):
  228. name = name + 'fix'
  229. allowed_domains = allowed_domains
  230. source = source
  231. source_name = source_name
  232. source_id = source_id
  233. class feiyuyueduBookInfoSpider(feiyuyueduProcess,simpleProcessBookInfoSpider):
  234. name = name + "bookinfo"
  235. allowed_domains = allowed_domains
  236. source = source
  237. source_name = source_name
  238. source_id = source_id