Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. const restler = require('restler');
  2. const fs = require('fs');
  3. const readDir = require('readdir');
  4. const powerOff = require('power-off');
  5.  
  6. const options = {
  7. folder: 'files',
  8. completefolder: 'complete',
  9. accesstoken: 'xxxxxxxxx'
  10. }
  11.  
  12. // shut down computer
  13. const shutDown = () => {powerOff((err, stderr, stdout) => {
  14. if(!err && !stderr) {
  15. console.log(stdout);
  16. }
  17. })
  18. };
  19.  
  20. // uploadFile uploads file with restler to mixcloud, if api returns rate limiting object, try again in x seconds
  21. const uploadFile = (folder, filename) => {
  22. const filepath = `./${folder}/${filename}`
  23. fs.stat(`./${folder}/${filename}`, function(err, stats) {
  24. const size = stats.size;
  25. restler.post(`https://api.mixcloud.com/upload/?access_token=${options.accesstoken}`, {
  26. multipart: true,
  27. data: {
  28. "mp3": restler.file(`./${folder}/${filename}`, null, size, null, 'audio/mpeg'),
  29. "name": filename,
  30. // "unlisted": true
  31.  
  32. // more data can be added here depending on changes in workflow, automate images etc
  33. }
  34. }).on("complete", function(data) {
  35. const returned = JSON.parse(data);
  36. if (returned.error) {
  37. if (returned.error.type == "RateLimitException") {
  38. // try again in x seconds
  39. console.log(`uploading too fast, retrying upload of ${filename}after ${returned.error.retry_after} seconds`);
  40. setTimeout(() => uploadFile(folder, filename), returned.error.retry_after*1000);
  41. }
  42. else {
  43. console.log('non-rate-limiting error');
  44. console.log(returned);
  45. }
  46. }
  47. else {
  48. console.log('Success!');
  49. console.log(returned);
  50. // move uploaded files into completed folder
  51. fs.rename(`./${folder}/${filename}`, `./${options.completefolder}/${filename}`, (err) => {
  52. if (err) {
  53. console.log(err)
  54. }
  55. else {
  56. counter += 1;
  57. console.log(counter);
  58. if (counter === files.length) {
  59. console.log('done');
  60. shutDown();
  61. }
  62. }
  63. })
  64. }
  65. });
  66. });
  67. };
  68.  
  69. // get all mp3s and upload all of them
  70. const files = readDir.readSync(`./${options.folder}`, ['**.mp3'] );
  71. let counter = 0;
  72. for (var i = 0; i < files.length; i++) {
  73. uploadFile(options.folder, files[i])
  74. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement