github.js 974 B

1234567891011121314151617181920212223242526272829303132333435
  1. let url = require('url');
  2. let ejs = require('ejs');
  3. let axios = require('axios');
  4. module.exports = {
  5. matches (url) {
  6. return url.match(/^https?:\/\/(www\.)?github\.com\/.+\/.+/i);
  7. },
  8. async getPreviewData (link_url) {
  9. try {
  10. let pathname = url.parse(link_url).pathname;
  11. let res = await axios.get('https://api.github.com/repos' + pathname);
  12. let partialTemplate = `
  13. <a href='<%= html_url + '/stargazers' %>' target='_blank' rel='noopener noreferer'>
  14. <%= stargazers_count %> stargazer<%= stargazers_count === 1 ? '' : 's' %>
  15. </a>
  16. and
  17. <a href='<%= html_url + '/network' %>' target='_blank' rel='noopener noreferer'>
  18. <%= forks_count %> fork<%= forks_count === 1 ? '' : 's' %>
  19. </a>
  20. `;
  21. return {
  22. title: res.data.full_name,
  23. url: res.data.html_url,
  24. description: res.data.description,
  25. partial: ejs.render(partialTemplate, res.data),
  26. image: res.data.owner.avatar_url
  27. };
  28. } catch (e) {
  29. return null;
  30. }
  31. }
  32. };