Communitygithub.com

majiayu000/claude-skill-registry

Métodos legais para acessar conteúdo atrás de paywalls e bloqueios geográficos. Use ao pesquisar atrás de paywalls, acessar artigos acadêmicos, contornar restrições geográficas ou encontrar alternativas de acesso aberto. Abrange Unpaywall, bancos de dados de bibliotecas, VPNs e estratégias de acesso ético para jornalistas e pesquisadores.

O que é claude-skill-registry?

Esta skill fornece uma hierarquia de acesso ético e legal para pesquisadores e jornalistas que precisam acessar conteúdo restrito online. Ela prioriza métodos totalmente legais, como bancos de dados de bibliotecas (PressReader, ProQuest, JSTOR) e ferramentas de acesso aberto (Unpaywall, CORE, PubMed Central), antes de abordar estratégias de área cinzenta, como o uso de arquivos e VPNs. Inclui exemplos de código Python e JavaScript para integrar APIs como a do Unpaywall e do Semantic Scholar, bem como scripts para remover sobreposições de paywalls suaves no navegador. A skill também oferece orientação sobre o uso apropriado de VPNs e métodos de arquivamento, deixando claro o que é recomendado e o que deve ser evitado para manter práticas de pesquisa éticas.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/majiayu000/claude-skill-registry/tree/HEAD/skills/domains/content-access

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Metodologia de acesso a conteúdo

Abordagens éticas e legais para acessar conteúdo web restrito para jornalismo e pesquisa.

Hierarquia de acesso (do mais para o menos preferido)

┌─────────────────────────────────────────────────────────────────┐
│              HIERARQUIA DE DECISÃO DE ACESSO A CONTEÚDO         │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. TOTALMENTE LEGAL (Sempre tentar primeiro)                  │
│     ├─ Bancos de dados de bibliotecas (PressReader, ProQuest, JSTOR)
│     ├─ Ferramentas de acesso aberto (Unpaywall, CORE, PubMed Central)│
│     ├─ Contato direto com o autor                                │
│     └─ Empréstimo entre bibliotecas                              │
│                                                                  │
│  2. LEGAL (Funcionalidades do navegador)                        │
│     ├─ Modo Leitor (Safari, Firefox, Edge)                      │
│     ├─ Arquivos da Wayback Machine                               │
│     └─ Google Scholar "Todas as versões"                         │
│                                                                  │
│  3. ÁREA CINZENTA (Usar com cautela)                            │
│     ├─ Archive.is para artigos individuais                      │
│     ├─ Desativar JavaScript (quebra funcionalidades)            │
│     └─ VPNs para conteúdo com bloqueio geográfico              │
│                                                                  │
│  4. NÃO RECOMENDADO                                             │
│     ├─ Compartilhamento de credenciais                          │
│     ├─ Raspagem sistemática                                     │
│     └─ Uso comercial de conteúdo contornado                     │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Ferramentas de acesso aberto para artigos acadêmicos

Extensão de navegador Unpaywall

Unpaywall encontra cópias gratuitas e legais de mais de 20 milhões de artigos acadêmicos.

# API Unpaywall (gratuita, requer email para identificação)
import requests

def find_open_access(doi: str, email: str) -> dict:
    """Encontra versão de acesso aberto de um artigo usando a API Unpaywall.

    Args:
        doi: Identificador de Objeto Digital (ex.: "10.1038/nature12373")
        email: Seu email para identificação na API

    Returns:
        Dicionário com melhor URL de acesso aberto, se disponível
    """
    url = f"https://api.unpaywall.org/v2/{doi}?email={email}"

    response = requests.get(url, timeout=30)

    if response.status_code != 200:
        return {'error': f'Status {response.status_code}'}

    data = response.json()

    if data.get('is_oa'):
        best_location = data.get('best_oa_location', {})
        return {
            'is_open_access': True,
            'oa_url': best_location.get('url_for_pdf') or best_location.get('url'),
            'oa_status': data.get('oa_status'),  # gold, green, bronze, hybrid
            'host_type': best_location.get('host_type'),  # publisher, repository
            'version': best_location.get('version')  # publishedVersion, acceptedVersion
        }

    return {
        'is_open_access': False,
        'title': data.get('title'),
        'journal': data.get('journal_name')
    }

# Uso
result = find_open_access("10.1038/nature12373", "[email protected]")
if result.get('is_open_access'):
    print(f"PDF gratuito em: {result['oa_url']}")

API CORE (295 milhões de artigos)

# API CORE - requer chave de API gratuita de https://core.ac.uk/

import requests

class CORESearch:
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://api.core.ac.uk/v3"

    def search(self, query: str, limit: int = 10) -> list:
        """Pesquisa no banco de dados CORE por artigos de acesso aberto."""

        headers = {'Authorization': f'Bearer {self.api_key}'}
        params = {
            'q': query,
            'limit': limit
        }

        response = requests.get(
            f"{self.base_url}/search/works",
            headers=headers,
            params=params,
            timeout=30
        )

        if response.status_code != 200:
            return []

        data = response.json()
        results = []

        for item in data.get('results', []):
            results.append({
                'title': item.get('title'),
                'authors': [a.get('name') for a in item.get('authors', [])],
                'year': item.get('yearPublished'),
                'doi': item.get('doi'),
                'download_url': item.get('downloadUrl'),
                'abstract': item.get('abstract', '')[:500]
            })

        return results

    def get_by_doi(self, doi: str) -> dict:
        """Obtém artigo por DOI."""
        headers = {'Authorization': f'Bearer {self.api_key}'}

        response = requests.get(
            f"{self.base_url}/works/{doi}",
            headers=headers,
            timeout=30
        )

        return response.json() if response.status_code == 200 else {}

API Semantic Scholar (214 milhões de artigos)

# API Semantic Scholar - gratuita, não requer chave para uso básico

import requests

def search_semantic_scholar(query: str, limit: int = 10) -> list:
    """Pesquisa no Semantic Scholar por artigos com links de acesso aberto."""

    url = "https://api.semanticscholar.org/graph/v1/paper/search"
    params = {
        'query': query,
        'limit': limit,
        'fields': 'title,authors,year,abstract,openAccessPdf,citationCount'
    }

    response = requests.get(url, params=params, timeout=30)

    if response.status_code != 200:
        return []

    results = []
    for paper in response.json().get('data', []):
        oa_pdf = paper.get('openAccessPdf', {})
        results.append({
            'title': paper.get('title'),
            'authors': [a.get('name') for a in paper.get('authors', [])],
            'year': paper.get('year'),
            'citations': paper.get('citationCount', 0),
            'open_access_url': oa_pdf.get('url') if oa_pdf else None,
            'abstract': paper.get('abstract', '')[:500] if paper.get('abstract') else ''
        })

    return results

def get_paper_by_doi(doi: str) -> dict:
    """Obtém detalhes do artigo por DOI."""
    url = f"https://api.semanticscholar.org/graph/v1/paper/DOI:{doi}"
    params = {
        'fields': 'title,authors,year,abstract,openAccessPdf,references,citations'
    }

    response = requests.get(url, params=params, timeout=30)
    return response.json() if response.status_code == 200 else {}

Modo leitor do navegador para paywalls suaves

Ativando o modo leitor

// Bookmarklet para ativar o modo leitor estilo Firefox
// Funciona em alguns paywalls suaves que carregam conteúdo antes de bloquear

javascript:(function(){
    // Tenta extrair o conteúdo do artigo
    var article = document.querySelector('article') ||
                  document.querySelector('[role="main"]') ||
                  document.querySelector('.article-body') ||
                  document.querySelector('.post-content');

    if (article) {
        // Remove sobreposições de paywall
        document.querySelectorAll('[class*="paywall"], [class*="subscribe"], [id*="paywall"]')
            .forEach(el => el.remove());

        // Remove sobreposições de posição fixa
        document.querySelectorAll('*').forEach(el => {
            var style = getComputedStyle(el);
            if (style.position === 'fixed' && style.zIndex > 100) {
                el.remove();
            }
        });

        // Reativa a rolagem
        document.body.style.overflow = 'auto';
        document.documentElement.style.overflow = 'auto';

        console.log('Sobreposição removida. O conteúdo pode agora estar visível.');
    }
})();

Modo leitor por navegador

NavegadorComo AtivarEficácia
SafariClique no ícone Leitor na barra de URLAlta para paywalls suaves
FirefoxClique no ícone Modo Leitor (ou F9)Alta
EdgeClique no ícone Leitor ImersivoMais alta
ChromeRequer flag: chrome://flags/#enable-reader-modeMédia

Acesso a bancos de dados de bibliotecas

Verificando acesso à biblioteca programaticamente

# A maioria dos bancos de dados de bibliotecas requer autenticação
# Isto mostra como estruturar o acesso à API da biblioteca

class LibraryAccess:
    """Padrão de acesso para bancos de dados de bibliotecas."""

    # Endpoints comuns de bancos de dados de bibliotecas
    DATABASES = {
        'pressreader': {
            'base': 'https://www.pressreader.com',
            'auth': 'carteira_de_biblioteca',
            'content': '7000+ jornais/revistas'
        },
        'proquest': {
            'base': 'https://www.proquest.com',
            'auth': 'institucional',
            'content': 'notícias, dissertações, documentos'
        },
        'jstor': {
            'base': 'https://www.jstor.org',
            'auth': 'institucional',
            'content': 'periódicos acadêmicos, livros'
        },
        'nexis_uni': {
            'base': 'https://www.nexisuni.com',
            'auth': 'institucional',
            'content': 'conteúdo jurídico, notícias, negócios'
        }
    }

    @staticmethod
    def get_pressreader_access_methods():
        """Maneiras de acessar PressReader através de bibliotecas."""
        return {
            'in_library': 'Conecte-se ao WiFi da biblioteca, visite pressreader.com',
            'remote': 'Faça login com as credenciais da carteira de biblioteca',
            'app': 'Baixe o aplicativo PressReader, vincule a carteira de biblioteca',
            'note': 'Acesso tipicamente de 30 a 48 horas por sessão'
        }

# Fluxo de trabalho de Empréstimo Entre Bibliotecas (ILL)
def request_via_ill(paper_info: dict, library_email: str) -> str:
    """Gera solicitação de empréstimo entre bibliotecas.

    ILL é gratuito através da maioria das bibliotecas e pode obter quase qualquer artigo.
    Prazo de entrega: normalmente de 3 a 7 dias.
    """

    request = f"""
    SOLICITAÇÃO DE EMPRÉSTIMO ENTRE BIBLIOTECAS

    Título: {paper_info.get('title')}
    Autor(es): {paper_info.get('authors')}
    Periódico: {paper_info.get('journal')}
    Ano: {paper_info.get('year')}
    DOI: {paper_info.get('doi')}
    Volume/Edição: {paper_info.get('volume')}/{paper_info.get('issue')}
    Páginas: {paper_info.get('pages')}

    Solicitado por: {library_email}
    """

    return request.strip()

Uso de VPN para conteúdo com bloqueio geográfico

Quando as VPNs são apropriadas

## Casos de uso legítimos de VPN para jornalistas/pesquisadores

### APROPRIADO:
- Acessar fontes de notícias específicas de uma região
- Pesquisar como o conteúdo aparece em outros países
- Contornar a censura governamental (em alguns contextos)
- Proteger comunicações de fontes
- Verificar conteúdo direcionado geograficamente

### INAPROPRIADO:
- Contornar controles de acesso legítimos
- Acessar conteúdo que você está contratualmente proibido de visualizar
- Evitar banimentos ou bloqueios colocados em sua conta

Comparação de serviços VPN

ServiçoMelhor ParaPrivacidadeVelocidadePreço
ExpressVPNContorno de censuraExcelenteRápida$$$
NordVPNUso geralExcelenteRápida$$
SurfsharkOrçamento, dispositivos ilimitadosBoaBoa$
ProtonVPNFoco em privacidadeExcelenteMédia$$
Tor BrowserMáximo anonimatoExcelenteLentaGratuito

Verificando status de restrição geográfica

import requests

def check_geo_access(url: str, regions: list = None) -> dict:
    """Verifica se a URL está acessível de diferentes regiões.

    Nota: Isso requer serviços VPN/proxy para testes reais.
    Esta função mostra o conceito.
    """

    regions = regions or ['US', 'UK', 'EU', 'JP', 'AU']

    results = {}

    # Teste de acesso direto
    try:
        response = requests.get(url, timeout=10)
        results['direct'] = {
            'accessible': response.status_code == 200,
            'status_code': response.status_code
        }
    except Exception as e:
        results['direct'] = {'accessible': False, 'error': str(e)}

    # Seria necessária integração VPN/proxy para testes regionais
    # results[region] = test_through_proxy(url, region)

    return results

Acesso baseado em arquivo

Usando Archive.today para artigos com paywall

import requests
from urllib.parse import quote

def get_archived_article(url: str) -> str:
    """Tenta obter artigo do Archive.today.

    O Archive.today frequentemente captura o conteúdo completo do artigo
    porque renderiza JavaScript e captura o resultado.

    O status legal varia por jurisdição - use para fins de pesquisa.
    """

    # Verifica arquivo existente
    search_url = f"https://archive.today/{quote(url, safe='')}"

    try:
        response = requests.get(search_url, timeout=30, allow_redirects=True)

        if response.status_code == 200 and 'archive.today' in response.url:
            return response.url

        # Nenhum arquivo existente - poderia solicitar um
        # Nota: Isso pode violar os Termos de Serviço, use com responsabilidade
        return None

    except Exception:
        return None

Wayback Machine para acesso histórico

def get_wayback_article(url: str) -> str:
    """Obtém artigo da Wayback Machine.

    100% legal - o Internet Archive é uma biblioteca reconhecida.
    Pode ter versões mais antigas de artigos (antes da implementação do paywall).
    """

    # Verifica disponibilidade
    api_url = f"http://archive.org/wayback/available?url={url}"

    try:
        response = requests.get(api_url, timeout=10)
        data = response.json()

        snapshot = data.get('archived_snapshots', {}).get('closest', {})

        if snapshot.get('available'):
            return snapshot['url']

        return None
    except Exception:
        return None

Estratégias do Google Scholar

Encontrando versões gratuitas

def find_free_via_scholar(title: str) -> list:
    """Estratégias de pesquisa para encontrar versões gratuitas de artigos.

    O Google Scholar frequentemente vincula a:
    - Cópias em sites pessoais dos autores
    - Versões em repositórios institucionais
    - ResearchGate/Academia.edu
    """

    # Estratégia de pesquisa 1: Título + "PDF"
    queries = [
        f'{title} filetype:pdf',
        f'{title} "free access"',
        f'{title} "preprint"',
        f'{title} "author version"'

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

majiayu000/claude-skill-registry

Builds, edit or validate Agent Skill through conversational discovery. Use when the user requests to "Create an Agent", "Optimize an Agent" or "Edit an Agent".

majiayu000/claude-skill-registry

Edit existing BMAD agents while maintaining compliance

majiayu000/claude-skill-registry

Edit existing BMAD agents while maintaining compliance

majiayu000/claude-skill-registry

Edit existing BMAD modules while maintaining coherence

majiayu000/claude-skill-registry

Edit existing BMAD modules while maintaining coherence

majiayu000/claude-skill-registry

Analyzes current state and user query to answer BMad questions or recommend the next workflow or agent. Use when user says what should I do next, what do I do now, or asks a question about BMad

majiayu000/claude-skill-registry

Build AI agents with Google ADK Python (Agent Development Kit). Use for multi-agent systems, workflow agents (sequential/parallel/loop), Vertex AI deployment, tool integration, human-in-the-loop.

majiayu000/claude-skill-registry

Build AI agents with Google ADK Python (Agent Development Kit). Use for multi-agent systems, workflow agents (sequential/parallel/loop), Vertex AI deployment, tool integration, human-in-the-loop.

majiayu000/claude-skill-registry

Portfolio allocation and rebalancing optimizer. Manages asset allocation across stocks/cash/bonds, performs periodic rebalancing, and ensures diversification according to market regime and risk tolerance.

majiayu000/claude-skill-registry

Create a hilarious and ultra-realistic video of an anthropomorphic animal acting like a human vlogger in a real-world setting.

majiayu000/claude-skill-registry

Speech-to-text transcription and translation via OpenAI Audio API -- models, response formats, timestamps, prompting, streaming, chunking, and diarization

majiayu000/claude-skill-registry

BlockRun works with Claude Code and Google Antigravity.

majiayu000/claude-skill-registry

This skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.

majiayu000/claude-skill-registry

小省导购员数字人带货版即梦视频提示词生成系统,基于四大智能体协同(提示词生成师、质量管控师、知识库运维师、跨环节适配师),按照"主体+运动+场景+(镜头语言+光影+氛围)"公式输出中英文双版提示词,适配5s短视频。确保人物一致性、视觉连贯性、情绪连贯性,支持知识库智能复用和跨工具适配(Suno音乐、AI绘画),为数字人带货视频提供高质量提示词生成服务。

majiayu000/claude-skill-registry

Upload and manage files using Google Gemini File API via scripts/. Use for uploading images, audio, video, PDFs, and other files for use with Gemini models. Supports file upload, status checking, and file management. Triggers on "upload file", "file API", "upload image", "upload PDF", "upload video", "file management".

majiayu000/claude-skill-registry

CRITICAL: Use for MolyKit AI chat toolkit. Triggers on: BotClient, OpenAI, SSE streaming, AI chat, molykit, PlatformSend, spawn(), ThreadToken, cross-platform async, Chat widget, Messages, PromptInput, Avatar, LLM

majiayu000/claude-skill-registry

AI and machine learning workflow covering LLM application development, RAG implementation, agent architecture, ML pipelines, and AI-powered features.

majiayu000/claude-skill-registry

Analyze images/audio/video with Gemini API (better vision than Claude). Generate images (Imagen 4), videos (Veo 3). Use for vision analysis, transcription, OCR, design extraction, multimodal AI.

majiayu000/claude-skill-registry

Analyze images/audio/video with Gemini API (better vision than Claude). Generate images (Imagen 4), videos (Veo 3). Use for vision analysis, transcription, OCR, design extraction, multimodal AI.

majiayu000/claude-skill-registry

Skill for discovering and researching autonomous AI agents, tools, and ecosystems using the AgentFolio directory.

Habilidades Relacionadas