Chaos_Cash

downloadBooks.lua

Jul 13th, 2025
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.74 KB | None | 0 0
  1. tArgs = {...}
  2.  
  3. function startup()
  4. bookData = {["nextChapter"] = tArgs[1]}
  5.  
  6.  
  7. periphemu.create("top","speaker")
  8. speaker = peripheral.wrap("top")
  9.  
  10. programIsRunning = true
  11.  
  12. neededInfos = {}
  13.  
  14. strangeStrings = {}
  15.  
  16. badLines = {}
  17.  
  18.  
  19. structureSizeLimit = 7000
  20. infoSizeLimit = 50000
  21. minChapterLen = 5
  22.  
  23.  
  24. addNeededInfo("chapterText","<p>","</p>",true)
  25. addNeededInfo("chapterText2","<br>","<br>",true)
  26. addNeededInfo("chapterName","title=\"","\"",false,"<h2><a",">","\"chr%-title\"")
  27. addNeededInfo("nextChapter","href=\"","\"",false,"<a",">","next_chap")
  28. addNeededInfo("bookName","title=\"","\"",false,"<h1><a",">","novel%-link")
  29. addStrangeString("&#x27;","'")
  30. addStrangeString("&gt;",">")
  31. addStrangeString("&amp;","&")
  32. addStrangeString("&nbsp;"," ")
  33. addStrangeString("&lt;","<")
  34. addStrangeString("<em>;","")
  35. addStrangeString("</em>;","")
  36. addBadLine("<img src=")
  37. addBadLine("Error loading comments. Please try again later.")
  38.  
  39. end
  40.  
  41.  
  42.  
  43. function addStrangeString(strangeString,replacement)
  44. table.insert(strangeStrings, {["string"]=strangeString,["replacement"]=replacement})
  45. end
  46.  
  47.  
  48.  
  49. function getBookData()
  50. website = http.get(bookData["nextChapter"])
  51.     if not website then
  52.         for i = 1,10 do
  53.         print(i)
  54.         sleep(0.5)
  55.         website = http.get(bookData["nextChapter"])
  56.             if website then
  57.             break
  58.             end
  59.         end
  60.     end
  61.    
  62.     if website then
  63.     websiteCode = website.readAll()
  64.     curChapter = bookData["nextChapter"]
  65.  
  66.     bookData = {}
  67.  
  68.         for k,v in pairs(neededInfos) do
  69.             if neededInfos[k]["isTable"] then
  70.             bookData[neededInfos[k]["name"]] = {}
  71.             else
  72.             bookData[neededInfos[k]["name"]] = nil
  73.             end
  74.        
  75.        
  76.             if neededInfos[k]["structureStart"] == nil then
  77.             identifyerStart,identifyerEnd = string.find(websiteCode,neededInfos[k]["identifyer"])
  78.                 while identifyerStart ~= nil do
  79.                 infoStart = identifyerEnd+1
  80.                 infoEnd = string.find(websiteCode,neededInfos[k]["ending"],infoStart)
  81.                     if infoEnd == nil then break end
  82.                 infoEnd = infoEnd-1
  83.                
  84.                     if infoEnd-infoStart < infoSizeLimit then
  85.                         if neededInfos[k]["isTable"] then
  86.                         bookData[neededInfos[k]["name"]][table.maxn(bookData[neededInfos[k]["name"]])+1] = string.sub(websiteCode,infoStart,infoEnd)
  87.                         else
  88.                         bookData[neededInfos[k]["name"]] = string.sub(websiteCode,infoStart,infoEnd)
  89.                         end
  90.                     else
  91.                     errorMessage("Info size limit exceeded")
  92.                     return
  93.                     end
  94.                
  95.                     identifyerStart,identifyerEnd = string.find(websiteCode,neededInfos[k]["identifyer"],infoEnd)
  96.                 end
  97.             end
  98.        
  99.        
  100.        
  101.        
  102.             if neededInfos[k]["structureStart"] ~= nil then
  103.             structureStartStart,structureStartEnd = string.find(websiteCode,neededInfos[k]["structureStart"])
  104.                 while structureStartStart ~= nil do
  105.                 structureStart = structureStartEnd+1
  106.                 structureEnd = string.find(websiteCode,neededInfos[k]["structureEnding"],structureStart)-1
  107.            
  108.                     if structureEnd-structureStart < structureSizeLimit then
  109.                     structureText = string.sub(websiteCode,structureStart,structureEnd)
  110.                         if neededInfos[k]["alsoInStructure"] == nil or string.find(structureText,neededInfos[k]["alsoInStructure"]) ~= nil then
  111.                         identifyerStart,identifyerEnd = string.find(structureText,neededInfos[k]["identifyer"])
  112.                             if identifyerStart ~= nil then
  113.                             infoStart = identifyerEnd+1
  114.                             infoEnd = string.find(structureText,neededInfos[k]["ending"],infoStart)-1
  115.                            
  116.                                 if infoEnd-infoStart < infoSizeLimit then
  117.                                     if neededInfos[k]["isTable"] then
  118.                                     table.insert(bookData[neededInfos[k]["name"]], string.sub(structureText,infoStart,infoEnd))
  119.                                     else
  120.                                     bookData[neededInfos[k]["name"]] = string.sub(structureText,infoStart,infoEnd)
  121.                                     end
  122.                                 else
  123.                                 errorMessage("Info size limit exceeded")
  124.                                 return
  125.                                 end
  126.                            
  127.                             end
  128.                        
  129.                         end
  130.                    
  131.                     else
  132.                     errorMessage("Structure size limit exceeded")
  133.                     return
  134.                     end
  135.            
  136.            
  137.                 structureStartStart,structureStartEnd = string.find(websiteCode,neededInfos[k]["structureStart"],structureEnd)
  138.                 end
  139.            
  140.             end
  141.            
  142.         end
  143.        
  144.     else
  145.     errorMessage("Website is nil.")
  146.     end
  147.  
  148. end
  149.  
  150.  
  151.  
  152. function addNeededInfo(infoName,identifyer,ending,isTable,structureStart,structureEnding,alsoInStructure)
  153. neededInfos[table.maxn(neededInfos)+1] = {}
  154. neededInfos[table.maxn(neededInfos)]["name"] = infoName
  155. neededInfos[table.maxn(neededInfos)]["identifyer"] = identifyer
  156. neededInfos[table.maxn(neededInfos)]["ending"] = ending
  157. neededInfos[table.maxn(neededInfos)]["isTable"] = isTable
  158. neededInfos[table.maxn(neededInfos)]["structureStart"] = structureStart
  159. neededInfos[table.maxn(neededInfos)]["structureEnding"] = structureEnding
  160. neededInfos[table.maxn(neededInfos)]["alsoInStructure"] = alsoInStructure
  161. end
  162.  
  163.  
  164.  
  165. function errorMessage(message)
  166. speaker.playLocalMusic("alarm.MP3")
  167. term.setBackgroundColor(colors.black)
  168. term.setTextColor(colors.red)
  169. print(message)
  170.  
  171. programIsRunning = false
  172.  
  173. sleep(4)
  174. end
  175.  
  176.  
  177.  
  178. function saveData()
  179.  
  180. file = fs.open("books/"..bookData["bookName"]..".txt","a")
  181.  
  182. file.writeLine(bookData["chapterName"].."\n")
  183.     for k,v in pairs(bookData["chapterText"]) do
  184.     file.writeLine(bookData["chapterText"][k].."\n")
  185.     end
  186.    
  187.     for k,v in pairs(bookData["chapterText2"]) do
  188.     file.writeLine(bookData["chapterText2"][k].."\n")
  189.     end
  190. file.writeLine("\n\n\n\n\n\n\n\n\n\n\n")
  191.  
  192. file.flush()
  193. file.close()
  194.  
  195.  
  196. file = fs.open("lastChapters/"..bookData["bookName"],"w")
  197. file.write(curChapter)
  198. file.flush()
  199. file.close()
  200.  
  201. end
  202.  
  203.  
  204.  
  205. function main()
  206.     while programIsRunning do
  207.     getBookData()
  208.         if programIsRunning then
  209.         correctData()
  210.         checkIfDataIsThere()
  211.         saveData()
  212.         term.setTextColor(colors.green)
  213.         print(bookData["chapterName"].."\n")
  214.         end
  215.     end
  216.    
  217. term.setBackgroundColor(colors.yellow)
  218. term.setTextColor(colors.black)
  219. print("Book done!")
  220. term.setBackgroundColor(colors.black)
  221. term.setTextColor(colors.white)
  222. print("")
  223. speaker.playLocalMusic("ding-sound-effect_1_CVUaI0C.mp3")
  224.  
  225. end
  226.  
  227.  
  228.  
  229. function checkIfDataIsThere()
  230.  
  231.     if table.maxn(bookData["chapterText"]) < minChapterLen and table.maxn(bookData["chapterText2"]) < minChapterLen then
  232.     errorMessage("Chapter is too short")
  233.     end
  234.    
  235.     if bookData["chapterName"] == nil then
  236.     errorMessage("Chapter name is nil")
  237.     end
  238.    
  239.     if bookData["nextChapter"] == nil then
  240.     errorMessage("Next chapter is nil")
  241.     end
  242.    
  243.     if bookData["bookName"] == nil then
  244.     errorMessage("Book name is nil")
  245.     end
  246.  
  247. end
  248.  
  249.  
  250.  
  251. function addBadLine(indicator)
  252. table.insert(badLines, indicator)
  253. end
  254.  
  255.  
  256.  
  257. function correctData()
  258. spaceCount = 0
  259.     for k,v in pairs(bookData["chapterText"]) do
  260.         if string.sub(v,1,1) == " " then
  261.         spaceCount = spaceCount+1
  262.         end
  263.     end
  264.    
  265.    
  266.    
  267.     if spaceCount > table.maxn(bookData["chapterText"])-6 then
  268.         for k,v in pairs(bookData["chapterText"]) do
  269.         bookData["chapterText"][k] = string.sub(v,2,string.len(v))
  270.         end
  271.     end
  272.    
  273.    
  274.    
  275.     for k,v in pairs(bookData["chapterText"]) do
  276.         if string.sub(v,string.len(v),string.len(v)) == "\n" then
  277.         bookData["chapterText"][k] = string.sub(v,1,string.len(v)-1)
  278.         end
  279.     end
  280.    
  281.    
  282.    
  283.     if string.find(bookData["chapterText"][table.maxn(bookData["chapterText"])],"nbsp") ~= nil then
  284.     bookData["chapterText"][table.maxn(bookData["chapterText"])] = nil
  285.     end
  286.    
  287.    
  288.    
  289.     for k,v in pairs(strangeStrings) do
  290.         for k2,v2 in pairs(neededInfos) do
  291.         curBookData = neededInfos[k2]["name"]
  292.        
  293.             if neededInfos[k2]["isTable"] then
  294.                 for k3,v3 in pairs(bookData[curBookData]) do
  295.                 strangeStart,strangeEnd = string.find(bookData[curBookData][k3],strangeStrings[k]["string"])
  296.                     while strangeStart do
  297.                         if strangeStart  then
  298.                         bookData[curBookData][k3] = string.sub(bookData[curBookData][k3],1,strangeStart-1) .. strangeStrings[k]["replacement"] .. string.sub(bookData[curBookData][k3],strangeEnd+1,string.len(bookData[curBookData][k3]))
  299.                         end
  300.                     strangeStart,strangeEnd = string.find(bookData[curBookData][k3],strangeStrings[k]["string"])
  301.                     end
  302.                 end
  303.             elseif curBookData then
  304.             strangeStart,strangeEnd = string.find(bookData[curBookData],strangeStrings[k]["string"])
  305.                 while strangeStart ~= nil do
  306.                     if strangeStart ~= nil then
  307.                     bookData[curBookData] = string.sub(bookData[curBookData],1,strangeStart-1) .. strangeStrings[k]["replacement"] .. string.sub(bookData[curBookData],strangeEnd+1,string.len(bookData[curBookData]))
  308.                     end
  309.                 strangeStart,strangeEnd = string.find(bookData[curBookData],strangeStrings[k]["string"])
  310.                 end
  311.             end
  312.         end
  313.     end
  314.    
  315.    
  316.    
  317.     for k,v in pairs(badLines) do
  318.         for k2,v2 in pairs(bookData["chapterText"]) do
  319.             if string.find(v2,v) ~= nil then
  320.             table.remove(bookData["chapterText"],k2)
  321.             end
  322.         end
  323.        
  324.         for k2,v2 in pairs(bookData["chapterText2"]) do
  325.             if string.find(v2,v) ~= nil then
  326.             table.remove(bookData["chapterText2"],k2)
  327.             end
  328.         end
  329.     end
  330.    
  331. end
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338. startup()
  339. main()
  340.  
Add Comment
Please, Sign In to add comment