[WORKING] Unlock any Medium Article

Unlock any paid article from Medium by using Freedium, works with custom domains too

  1. // ==UserScript==
  2. // @name [WORKING] Unlock any Medium Article
  3. // @namespace https://github.com/insign
  4. // @version 202409271723
  5. // @description Unlock any paid article from Medium by using Freedium, works with custom domains too
  6. // @author Hélio <open@helio.me>
  7. // @match *://*/*
  8. // @grant none
  9. // @license WTFPL
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. // Função para verificar a presença da meta tag específica
  16. function isMediumArticle() {
  17. return document.querySelector('meta[data-rh="true"][property="al:ios:app_name"][content="Medium"]') !== null;
  18. }
  19.  
  20. // Função para realizar o redirecionamento
  21. function redirectToFreedium() {
  22. // Obtém a URL atual
  23. var currentURL = window.location.href;
  24.  
  25. // Verifica se já não está na URL do Freedium para evitar loop
  26. if (!currentURL.startsWith('https://freedium.cfd/')) {
  27. // Cria a nova URL redirecionada
  28. var freediumURL = 'https://freedium.cfd/' + currentURL;
  29.  
  30. // Redireciona para a nova URL
  31. window.location.replace(freediumURL);
  32. }
  33. }
  34.  
  35. // Função principal que controla o fluxo
  36. function main() {
  37. // Verifica se a página é um artigo do Medium
  38. if (isMediumArticle()) {
  39. // Obtém o referenciador (a página anterior que o usuário veio)
  40. var referrer = document.referrer;
  41.  
  42. var shouldRedirect = true;
  43.  
  44. if (referrer) {
  45. try {
  46. // Analisa a URL do referenciador para obter o hostname
  47. var referrerHost = (new URL(referrer)).hostname;
  48.  
  49. // Verifica se o referenciador é freedium.cfd
  50. if (referrerHost === 'freedium.cfd') {
  51. shouldRedirect = false; // Não redireciona se veio do Freedium
  52. }
  53. } catch (e) {
  54. // Se não for possível analisar o referenciador, continua com o redirecionamento
  55. console.error('Erro ao analisar o referenciador:', e);
  56. }
  57. }
  58.  
  59. if (shouldRedirect) {
  60. redirectToFreedium();
  61. }
  62. }
  63. }
  64.  
  65. // Executa a função principal quando o conteúdo do documento estiver carregado
  66. if (document.readyState === 'complete' || document.readyState === 'interactive') {
  67. setTimeout(main, 1);
  68. } else {
  69. document.addEventListener('DOMContentLoaded', main);
  70. }
  71. })();