Moved repository to common gitea repository, update link to our website
This commit is contained in:
		
							parent
							
								
									d0c1f0c6e6
								
							
						
					
					
						commit
						9f78efb7b4
					
				| @ -1,2 +1,3 @@ | ||||
| # xml-expander | ||||
| 
 | ||||
| This code is daemonized using systemd - look for /lib/systemd/system/xml-expander.service | ||||
							
								
								
									
										78
									
								
								index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,78 @@ | ||||
| import Koa from "koa"; | ||||
| import Axios from "axios"; | ||||
| import * as xml2js from "xml2js"; | ||||
| 
 | ||||
| const app = new Koa(); | ||||
| 
 | ||||
| app.use(async (ctx) => { | ||||
|     try { | ||||
|         const { data } = await Axios.get( | ||||
|             "https://podcast.midline.pl/api/v1/channels/Midline/rss" | ||||
|         ); | ||||
|         const builder = new xml2js.Builder(); | ||||
|         const parsed_data = await xml2js.parseStringPromise(data); | ||||
|         parsed_data.rss.channel[0]["itunes:author"] = | ||||
|             "Arkadiusz Wieczorek, Kuba Orlik"; | ||||
|         parsed_data.rss.channel[0]["itunes:owner"][0]["itunes:email"] = | ||||
|             "kontakt@midline.pl"; | ||||
|         parsed_data.rss.channel[0]["itunes:owner"][0]["itunes:name"] = | ||||
|             "Arkadiusz Wieczorek, Kuba Orlik"; | ||||
|         parsed_data.rss.channel[0]["link"] = "https://www.internet-czas-dzialac.pl"; | ||||
|         parsed_data.rss.channel[0][ | ||||
|             "itunes:keywords" | ||||
|         ][0] = parsed_data.rss.channel[0]["itunes:keywords"][0] | ||||
|             .split(" ") | ||||
|             .toString(); | ||||
|         parsed_data.rss.channel[0][ | ||||
|             "itunes:summary" | ||||
|         ][0] = parsed_data.rss.channel[0]["itunes:summary"][0].replace( | ||||
|             /(<([^>]+)>)/gi, | ||||
|             "" | ||||
|         ); | ||||
| 
 | ||||
|         for ( | ||||
|             let i = 0; | ||||
|             i < parsed_data.rss.channel[0]["atom:link"].length; | ||||
|             i++ | ||||
|         ) { | ||||
|             const atomLink = parsed_data.rss.channel[0]["atom:link"][i]; | ||||
| 
 | ||||
|             if (atomLink.$.rel === "self") { | ||||
|                 atomLink.$.href = "https://podcast.midline.pl/feed.xml"; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         let last_index = 1; | ||||
|         for (let i = 0; i < parsed_data.rss.channel[0]["item"].length; i++) { | ||||
|             const item = parsed_data.rss.channel[0]["item"][i]; | ||||
| 
 | ||||
|             item["guid"][0].$.isPermaLink = item["guid"][0].$.isPermalink; | ||||
|             delete item["guid"][0].$.isPermalink; | ||||
|             item["itunes:subtitle"][0] = | ||||
|                 item["itunes:subtitle"][0].slice(0, -2) + "…"; | ||||
|             item["itunes:summary"][0] = item["itunes:summary"][0].replace( | ||||
|                 /(<([^>]+)>)/gi, | ||||
|                 "" | ||||
|             ); | ||||
|             if (item["title"][0].match(/#[0-9]*/)[0].substring(1) !== "0") { | ||||
|                 try { | ||||
|                     last_index = item["title"][0] | ||||
|                         .match(/#[1-9][0-9]*/)[0] | ||||
|                         .substring(1); | ||||
|                 } catch (e) { | ||||
|                     last_index = last_index + 1; | ||||
|                 } | ||||
|                 item["itunes:episode"] = [last_index]; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         ctx.body = builder.buildObject(parsed_data); | ||||
|         ctx.type = "application/rss+xml"; | ||||
|     } catch (e) { | ||||
|         console.error(e); | ||||
|         ctx.body = "error"; | ||||
|         ctx.status = 500; | ||||
|     } | ||||
| }); | ||||
| 
 | ||||
| app.listen(3000); | ||||
							
								
								
									
										22
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| { | ||||
| 	"name": "xml-expander", | ||||
| 	"version": "1.0.0", | ||||
| 	"description": "", | ||||
| 	"main": "index.js", | ||||
| 	"scripts": { | ||||
| 		"build": "tsc" | ||||
| 	}, | ||||
| 	"author": "", | ||||
| 	"license": "ISC", | ||||
| 	"dependencies": { | ||||
| 		"axios": "^0.19.2", | ||||
| 		"koa": "^2.12.0", | ||||
| 		"xml2js": "^0.4.23" | ||||
| 	}, | ||||
| 	"devDependencies": { | ||||
| 		"@types/axios": "^0.14.0", | ||||
| 		"@types/koa": "^2.11.3", | ||||
| 		"@types/xml2js": "^0.4.5", | ||||
| 		"typescript": "^3.9.5" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										14
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | ||||
| { | ||||
| 	"compilerOptions": { | ||||
| 		"moduleResolution": "node", | ||||
| 		"noImplicitAny": true, | ||||
| 		"noImplicitThis": true, | ||||
| 		"sourceMap": true, | ||||
| 		"module": "commonjs", | ||||
| 		"target": "es6", | ||||
| 		"allowJs": false, | ||||
| 		"strictNullChecks": true, | ||||
| 		"esModuleInterop": true, | ||||
| 		"outDir": "build" | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user