rules.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package rewrite // import "miniflux.app/v2/internal/reader/rewrite"
  4. import "regexp"
  5. // List of predefined rewrite rules (alphabetically sorted)
  6. // Available rules: "add_image_title", "add_youtube_video"
  7. // domain => rule name
  8. var predefinedRules = map[string]string{
  9. "abstrusegoose.com": "add_image_title",
  10. "amazingsuperpowers.com": "add_image_title",
  11. "blog.cloudflare.com": `add_image_title,remove("figure.kg-image-card figure.kg-image + img")`,
  12. "cowbirdsinlove.com": "add_image_title",
  13. "drawingboardcomic.com": "add_image_title",
  14. "exocomics.com": "add_image_title",
  15. "framatube.org": "nl2br,convert_text_link",
  16. "happletea.com": "add_image_title",
  17. "ilpost.it": `remove(".art_tag, #audioPlayerArticle, .author-container, .caption, .ilpostShare, .lastRecents, #mc_embed_signup, .outbrain_inread, p:has(.leggi-anche), .youtube-overlay")`,
  18. "imogenquest.net": "add_image_title",
  19. "lukesurl.com": "add_image_title",
  20. "medium.com": "fix_medium_images",
  21. "mercworks.net": "add_image_title",
  22. "monkeyuser.com": "add_image_title",
  23. "mrlovenstein.com": "add_image_title",
  24. "nedroid.com": "add_image_title",
  25. "oglaf.com": `replace("media.oglaf.com/story/tt(.+).gif"|"media.oglaf.com/comic/$1.jpg"),add_image_title`,
  26. "optipess.com": "add_image_title",
  27. "peebleslab.com": "add_image_title",
  28. "quantamagazine.org": `add_youtube_video_from_id, remove("h6:not(.byline,.post__title__kicker), #comments, .next-post__content, .footer__section, figure .outer--content, script")`,
  29. "sentfromthemoon.com": "add_image_title",
  30. "thedoghousediaries.com": "add_image_title",
  31. "theverge.com": `add_dynamic_image, remove("div.duet--recirculation--related-list, .hidden")`,
  32. "treelobsters.com": "add_image_title",
  33. "webtoons.com": `add_dynamic_image,replace("webtoon"|"swebtoon")`,
  34. "www.qwantz.com": "add_image_title,add_mailto_subject",
  35. "xkcd.com": "add_image_title",
  36. "youtube.com": "add_youtube_video",
  37. }
  38. type RefererRule struct {
  39. URLPattern *regexp.Regexp
  40. Referer string
  41. }
  42. // List of predefined referer rules
  43. var PredefinedRefererRules = []RefererRule{
  44. {
  45. URLPattern: regexp.MustCompile(`^https://\w+\.sinaimg\.cn`),
  46. Referer: "https://weibo.com",
  47. },
  48. {
  49. URLPattern: regexp.MustCompile(`^https://i\.pximg\.net`),
  50. Referer: "https://www.pixiv.net",
  51. },
  52. {
  53. URLPattern: regexp.MustCompile(`^https://cdnfile\.sspai\.com`),
  54. Referer: "https://sspai.com",
  55. },
  56. {
  57. URLPattern: regexp.MustCompile(`^https://(?:\w|-)+\.cdninstagram\.com`),
  58. Referer: "https://www.instagram.com",
  59. },
  60. {
  61. URLPattern: regexp.MustCompile(`^https://sp1\.piokok\.com`),
  62. Referer: "https://sp1.piokok.com",
  63. },
  64. {
  65. URLPattern: regexp.MustCompile(`^https://f\.video\.weibocdn\.com`),
  66. Referer: "https://weibo.com",
  67. },
  68. {
  69. URLPattern: regexp.MustCompile(`^https://img\.hellogithub\.com`),
  70. Referer: "https://hellogithub.com",
  71. },
  72. }
  73. // GetRefererForURL returns the referer for the given URL if it exists, otherwise an empty string.
  74. func GetRefererForURL(url string) string {
  75. for _, rule := range PredefinedRefererRules {
  76. if rule.URLPattern.MatchString(url) {
  77. return rule.Referer
  78. }
  79. }
  80. return ""
  81. }