amazon.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. let ejs = require('ejs');
  2. let cheerio = require('cheerio');
  3. let axios = require('axios');
  4. module.exports = {
  5. matches (url) {
  6. let amazonRegExp = /^(https?:\/\/(www\.)?(smile.)?(amazon|amzn)\.(com|com\.au|com\.br|ca|cn|fr|de|in|it|co\.jp|com\.mx|nl|es|co\.uk)\/(gp\/product|[A-Z0-9-]+\/dp)\/[A-Z0-9]+)/i;
  7. return url.match(amazonRegExp);
  8. },
  9. async getPreviewData (link_url) {
  10. try {
  11. let res = await axios.get(link_url);
  12. let $ = cheerio.load(res.data);
  13. data = {
  14. title: $('#productTitle').text().trim(),
  15. description: $('meta[name="description"]').attr('content').trim(),
  16. url: this.matches(link_url)[0]
  17. }
  18. let image = $('#landingImage').data('old-hires');
  19. if(image) data.image = image;
  20. let price = $('#priceblock_ourprice').text();
  21. let stars = $('.a-icon.a-icon-star .a-icon-alt').first().text();
  22. if(stars ||price) {
  23. let reviewUrl = data.url + '#customerReviews';
  24. let partialTemplate = `
  25. <% if (stars) { %>
  26. <a href='<%= reviewUrl %>' target='_blank' rel='noopener noreferer'>
  27. <%= stars%>
  28. </a>
  29. &nbsp; | &nbsp;
  30. <% } %>
  31. <% if (price) { %>
  32. <%= price %>
  33. <% } %>
  34. `;
  35. data.partial = ejs.render(partialTemplate, { reviewUrl, stars, price })
  36. }
  37. return data;
  38. } catch (e) {
  39. console.log(e)
  40. return null;
  41. }
  42. }
  43. };