Communitygithub.com

majiayu000/claude-skill-registry

获取付费墙和地理限制内容的合法方法。适用于付费墙后的研究、访问学术论文、绕过地理限制或寻找开放获取替代方案。涵盖Unpaywall、图书馆数据库、VPN以及面向记者和研究人员的伦理访问策略。

claude-skill-registry 是什么?

此技能提供了一套完整且合乎伦理的流程,用于访问受限制的网络内容,特别适合记者和学术研究人员。其核心是一个决策层次:优先使用完全合法的途径(如图书馆数据库和开放获取工具),然后是浏览器内置功能(如阅读模式),谨慎使用灰色地带方法(如VPN),并警告不推荐的做法(如共享凭证)。该技能详细介绍了多个开放获取API,包括Unpaywall、CORE和Semantic Scholar,并提供了完整的Python示例代码,可通过DOI或关键词搜索来定位合法免费版本。此外,它还涵盖了利用浏览器阅读模式绕过软性付费墙、通过编程方式检查图书馆数据库访问、使用VPN突破地理封锁以及利用Wayback Machine等归档服务获取历史内容。该技能在设计上强调合法性、伦理性和实用性,并明确区分了适当与不适当的使用场景,适合在Claude Code、Cursor等AI编程工具中使用,以嵌入到自动化研究流程中。

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

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

内容访问方法论

针对记者和研究人员的伦理且合法的受限网络内容访问方法。

访问层次(从最推荐到最不推荐)

┌─────────────────────────────────────────────────────────────────┐
│              内容访问决策层次                                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 完全合法(优先始终尝试)                                     │
│     ├─ 图书馆数据库(PressReader、ProQuest、JSTOR)              │
│     ├─ 开放获取工具(Unpaywall、CORE、PubMed Central)           │
│     ├─ 直接联系作者                                             │
│     └─ 馆际互借                                                 │
│                                                                  │
│  2. 合法(浏览器功能)                                           │
│     ├─ 阅读模式(Safari、Firefox、Edge)                         │
│     ├─ Wayback Machine 归档                                     │
│     └─ Google Scholar“所有版本”                                  │
│                                                                  │
│  3. 灰色地带(谨慎使用)                                         │
│     ├─ Archive.is 用于单篇文章                                  │
│     ├─ 禁用JavaScript(可能破坏功能)                             │
│     └─ 用于绕过地理限制的VPN                                    │
│                                                                  │
│  4. 不推荐                                                      │
│     ├─ 共享凭证                                                 │
│     ├─ 系统性爬取                                               │
│     └─ 商业使用绕过的内容                                       │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

学术论文的开放获取工具

Unpaywall 浏览器扩展

Unpaywall 找到超过2000万篇学术论文的免费合法副本。

# Unpaywall API(免费,需要邮箱进行身份识别)
import requests

def find_open_access(doi: str, email: str) -> dict:
    """使用 Unpaywall API 查找论文的开放获取版本。

    Args:
        doi: 数字对象标识符(例如 "10.1038/nature12373")
        email: 用于 API 身份识别的邮箱

    Returns:
        如果存在开放获取版本,则返回包含最佳 URL 的字典
    """
    url = f"https://api.unpaywall.org/v2/{doi}?email={email}"

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

    if response.status_code != 200:
        return {'error': f'状态码 {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')
    }

# 使用示例
result = find_open_access("10.1038/nature12373", "[email protected]")
if result.get('is_open_access'):
    print(f"免费 PDF 地址:{result['oa_url']}")

CORE API(2.95亿篇论文)

# CORE API - 需要从 https://core.ac.uk/ 获取免费 API 密钥

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:
        """搜索 CORE 数据库中的开放获取论文。"""

        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:
        """根据 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 {}

Semantic Scholar API(2.14亿篇论文)

# Semantic Scholar API - 免费,基本使用无需密钥

import requests

def search_semantic_scholar(query: str, limit: int = 10) -> list:
    """搜索 Semantic Scholar 中的包含开放获取链接的论文。"""

    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:
    """根据 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 {}

用于软性付费墙的浏览器阅读模式

激活阅读模式

// 触发 Firefox 风格阅读模式的书签工具
// 适用于某些在阻止内容之前加载内容的软性付费墙

javascript:(function(){
    // 尝试提取文章内容
    var article = document.querySelector('article') ||
                  document.querySelector('[role="main"]') ||
                  document.querySelector('.article-body') ||
                  document.querySelector('.post-content');

    if (article) {
        // 移除付费墙覆盖层
        document.querySelectorAll('[class*="paywall"], [class*="subscribe"], [id*="paywall"]')
            .forEach(el => el.remove());

        // 移除固定位置覆盖层
        document.querySelectorAll('*').forEach(el => {
            var style = getComputedStyle(el);
            if (style.position === 'fixed' && style.zIndex > 100) {
                el.remove();
            }
        });

        // 重新启用滚动
        document.body.style.overflow = 'auto';
        document.documentElement.style.overflow = 'auto';

        console.log('覆盖层已移除。内容现在可能可见。');
    }
})();

各浏览器的阅读模式

浏览器如何激活效果
Safari点击地址栏中的阅读器图标对软性付费墙效果高
Firefox点击阅读视图图标(或 F9)高
Edge点击沉浸式阅读器图标最高
Chrome需要标记:chrome://flags/#enable-reader-mode中等

图书馆数据库访问

编程方式检查图书馆访问

# 大多数图书馆数据库需要身份验证
# 以下展示如何构建图书馆 API 访问

class LibraryAccess:
    """图书馆数据库的访问模式。"""

    # 常见图书馆数据库端点
    DATABASES = {
        'pressreader': {
            'base': 'https://www.pressreader.com',
            'auth': 'library_card',
            'content': '7000+ newspapers/magazines'
        },
        'proquest': {
            'base': 'https://www.proquest.com',
            'auth': 'institutional',
            'content': 'news, dissertations, documents'
        },
        'jstor': {
            'base': 'https://www.jstor.org',
            'auth': 'institutional',
            'content': 'academic journals, books'
        },
        'nexis_uni': {
            'base': 'https://www.nexisuni.com',
            'auth': 'institutional',
            'content': 'legal, news, business'
        }
    }

    @staticmethod
    def get_pressreader_access_methods():
        """通过图书馆访问 PressReader 的方法。"""
        return {
            'in_library': '连接图书馆 WiFi,访问 pressreader.com',
            'remote': '使用图书馆卡凭据登录',
            'app': '下载 PressReader 应用,绑定图书馆卡',
            'note': '每次会话的访问权限通常为30-48小时'
        }

# 馆际互借(ILL)工作流程
def request_via_ill(paper_info: dict, library_email: str) -> str:
    """生成馆际互借请求。

    ILL 通过大多数图书馆免费提供,几乎可以获得任何论文。
    周转时间:通常3-7天。
    """

    request = f"""
    INTERLIBRARY LOAN REQUEST

    Title: {paper_info.get('title')}
    Author(s): {paper_info.get('authors')}
    Journal: {paper_info.get('journal')}
    Year: {paper_info.get('year')}
    DOI: {paper_info.get('doi')}
    Volume/Issue: {paper_info.get('volume')}/{paper_info.get('issue')}
    Pages: {paper_info.get('pages')}

    Requested by: {library_email}
    """

    return request.strip()

用于地理限制内容的 VPN 使用

何时适合使用 VPN

## 记者/研究人员的合法 VPN 用例

### 适当:
- 访问特定地区的新闻来源
- 研究内容在其他国家的呈现方式
- 在某些情况下绕过政府审查
- 保护消息来源通信
- 验证基于地理定位的内容

### 不适当:
- 规避合法的访问控制
- 访问按合同规定禁止查看的内容
- 逃避对您账户的禁令或封锁

VPN 服务比较

服务最适合隐私速度价格
ExpressVPN绕过审查优秀快$$$
NordVPN一般使用优秀快$$
Surfshark预算、无限设备良好好$
ProtonVPN注重隐私优秀中等$$
Tor Browser最大匿名性优秀慢免费

检查地理限制状态

import requests

def check_geo_access(url: str, regions: list = None) -> dict:
    """检查 URL 是否可从不同地区访问。

    注意:这需要 VPN/代理服务进行实际测试。
    此函数仅展示概念。
    """

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

    results = {}

    # 直接访问测试
    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)}

    # 需要 VPN/代理集成进行地区测试
    # results[region] = test_through_proxy(url, region)

    return results

基于归档的访问

使用 Archive.today 获取付费墙文章

import requests
from urllib.parse import quote

def get_archived_article(url: str) -> str:
    """尝试从 Archive.today 获取文章。

    Archive.today 通常会捕获完整的文章内容,
    因为它会渲染 JavaScript 并捕获结果。

    法律状态因司法管辖区而异 - 仅供研究目的使用。
    """

    # 检查现有归档
    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

        # 没有现有归档 - 可以请求创建一个
        # 注意:这可能违反服务条款,请负责任地使用
        return None

    except Exception:
        return None

Wayback Machine 用于历史访问

def get_wayback_article(url: str) -> str:
    """从 Wayback Machine 获取文章。

    100% 合法 - Internet Archive 是一个被认可的图书馆。
    可能包含文章的历史版本(在实施付费墙之前)。
    """

    # 检查可用性
    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

Google Scholar 策略

查找免费版本

def find_free_via_scholar(title: str) -> list:
    """查找免费论文版本的搜索策略。

    Google Scholar 通常链接到:
    - 作者个人网站上的副本
    - 机构知识库版本
    - ResearchGate/Academia

…[已截断用于翻译]

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.

相关技能