getOGPreviewData.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. let cheerio = require('cheerio');
  2. let axios = require('axios');
  3. module.exports = async function getOGPreviewData (url) {
  4. try {
  5. let res = await axios.get(url);
  6. let $ = cheerio.load(res.data);
  7. let OG = {
  8. title: $('meta[property="og:title"]'),
  9. url: $('meta[property="og:url"]'),
  10. image: $('meta[property="og:image"]'),
  11. description: $('meta[property="og:description"]')
  12. };
  13. let alternative = {
  14. title: $('title'),
  15. description: $('meta[name="description"]')
  16. };
  17. let data = {};
  18. if(OG.title.length && OG.url.length) {
  19. data.title = OG.title.attr('content');
  20. data.url = OG.url.attr('content');
  21. if(OG.image) data.image = OG.image.attr('content');
  22. if(OG.description) data.description = OG.description.attr('content');
  23. return data;
  24. } else if(alternative.title.length && alternative.description.length) {
  25. data.title = alternative.title.text();
  26. data.description = alternative.description.attr('content');
  27. } else {
  28. return null;
  29. }
  30. return data;
  31. } catch (e) {
  32. return null;
  33. }
  34. }