├── .gitignore ├── README.md ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | # lock 107 | package-lock.json -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # node.js-podcastindex-org-example 2 | 3 | node.js example for https://podcastindex.org 4 | 5 | this is original source code written by me (CSB) 6 | 7 | how to use: 8 | 9 | 1) download node.js with npm from https://nodejs.org/en/download/ 10 | (available for mac, Windows, Linux, docker, etc) 11 | 12 | 2) download this repository either via "git clone" or via "Download ZIP" menu under "Code" button 13 | 14 | 3) replace "ABC" with proper values from https://api.podcastindex.org : 15 | ``` 16 | var apiKey = "ABC"; 17 | var apiSecret = "ABC" 18 | ``` 19 | 4) execute in command line: 20 | ``` 21 | npm install 22 | ``` 23 | 5) execute in command line: 24 | ``` 25 | node index.js 26 | ``` 27 | *** 28 | 29 | if you need support regarding this example, you want to give feedback or you have questions, just contact me on Twitter: https://twitter.com/csb 30 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // ======== Required values ======== 2 | // WARNING: don't publish these to public repositories or in public places! 3 | // NOTE: values below are sample values, to get your own values go to https://api.podcastindex.org 4 | var apiKey = "ABC"; 5 | var apiSecret = "ABC" 6 | // ======== Hash them to get the Authorization token ======== 7 | let crypto = require('crypto'); 8 | var apiHeaderTime = Math.floor(Date.now()/1000); //console.log(`apiHeaderTime=[${apiHeaderTime}]`); 9 | var sha1Algorithm = "sha1"; var sha1Hash = crypto.createHash(sha1Algorithm); 10 | var data4Hash = apiKey + apiSecret + apiHeaderTime; 11 | sha1Hash.update(data4Hash); var hash4Header = sha1Hash.digest('hex'); console.log(`hash4Header=[${hash4Header}]`); 12 | // ======== Send the request and collect/show the results ======== 13 | const fetch = require('node-fetch'); 14 | let options = 15 | { method: "get", 16 | headers: { 17 | // not needed right now, maybe in future: "Content-Type": "application/json", 18 | "X-Auth-Date": ""+apiHeaderTime, 19 | "X-Auth-Key": apiKey, 20 | "Authorization": hash4Header, 21 | "User-Agent": "SuperPodcastPlayer/1.8" 22 | }, 23 | }; 24 | var query = "bastiat"; var url = "https://api.podcastindex.org/api/1.0/search/byterm?q="+query; 25 | fetch(url, options) 26 | .then(res => res.json()) 27 | .then(json => { console.log(json); } ); 28 | 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node.js-podcastindex-org-example", 3 | "version": "0.0.33", 4 | "description": "node.js example for https://podcastindex.org ", 5 | "main": "index.js", 6 | "dependencies": { 7 | "express": "latest", 8 | "node-fetch": "latest" 9 | }, 10 | "scripts": { 11 | "test": "echo \"Error: no test specified\" && exit 1" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/ComicStrip/node.js-podcastindex-org-example.git" 16 | }, 17 | "keywords": [ 18 | "podcasting", 19 | "node.js" 20 | ], 21 | "author": "CSB", 22 | "license": "ISC", 23 | "bugs": { 24 | "url": "https://github.com/ComicStrip/node.js-podcastindex-org-example/issues" 25 | }, 26 | "homepage": "https://github.com/ComicStrip/node.js-podcastindex-org-example#readme" 27 | } 28 | --------------------------------------------------------------------------------