Communitygithub.com

majiayu000/claude-skill-registry

ペイウォールや地域制限のあるコンテンツに、倫理的かつ合法的にアクセスするための手法。ジャーナリストや研究者向けに、Unpaywall、図書館データベース、VPN、オープンアクセス代替手段などをカバーします。

claude-skill-registry とは?

このスキルは、ジャーナリストや研究者がペイウォールや地理的制限に直面した際に、倫理的かつ合法的な方法でコンテンツにアクセスするための包括的なガイドです。優先順位に基づいたアクセス階層を提供し、図書館データベース(PressReader、ProQuest、JSTOR)やオープンアクセスツール(Unpaywall、CORE、Semantic Scholar)を最優先で使用するよう推奨します。ブラウザのリーダーモードやWayback Machine、Google Scholarの「すべてのバージョン」機能などの合法的な回避策も紹介されています。さらに、VPNの適切な使用例やアーカイブサイトの活用方法も説明されており、研究者が効率的に情報を入手するための実用的なPythonコードやデータベースクエリも含まれています。Claude Code、Cursor、CodexなどのAIエージェントで使用可能で、特定のプラットフォームに依存せず、スタンドアロンのスキルとして機能します。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

コンテンツアクセス手法

ジャーナリズムと研究における、制限付きウェブコンテンツへの倫理的かつ合法的なアプローチ。

アクセス階層(推奨順)

┌─────────────────────────────────────────────────────────────────┐
│              コンテンツアクセス判断の階層                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 完全合法(常に最初に試す)                                    │
│     ├─ 図書館データベース(PressReader、ProQuest、JSTOR)         │
│     ├─ オープンアクセスツール(Unpaywall、CORE、PubMed Central)│
│     ├─ 著者への直接連絡                                         │
│     └─ 図書館間相互貸借                                          │
│                                                                  │
│  2. 合法(ブラウザ機能)                                         │
│     ├─ リーダーモード(Safari、Firefox、Edge)                   │
│     ├─ Wayback Machine アーカイブ                                │
│     └─ Google Scholar「すべてのバージョン」                       │
│                                                                  │
│  3. グレーゾーン(注意して使用)                                 │
│     ├─ 個別記事での Archive.is 使用                              │
│     ├─ JavaScript 無効化(機能が損なわれる)                     │
│     └─ 地域制限コンテンツ向け VPN                               │
│                                                                  │
│  4. 非推奨                                                       │
│     ├─ 認証情報の共有                                            │
│     ├─ 体系的なスクレイピング                                    │
│     └─ バイパスしたコンテンツの営利利用                          │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

学術論文向けオープンアクセスツール

Unpaywall ブラウザ拡張機能

Unpaywall は、2,000 万以上の学術論文の無料で合法的なコピーを見つけます。

# 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'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')
    }

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

CORE API(2 億 9,500 万件の論文)

# 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 億 1,400 万件の論文)

# 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('オーバーレイを削除しました。コンテンツが表示される場合があります。');
    }
})();

ブラウザ別リーダーモード

ブラウザ有効化方法効果
SafariURL バーのリーダーアイコンをクリックソフトペイウォールに高い
Firefoxリーダービューアイコンをクリック(または F9)高い
Edgeイマーシブリーダーアイコンをクリック最も高い
Chromeフラグが必要: chrome://flags/#enable-reader-mode中程度

図書館データベースへのアクセス

プログラムによる図書館アクセスの確認

# ほとんどの図書館データベースは認証が必要です
# これは図書館 API アクセスの構造を示しています

class LibraryAccess:
    """図書館データベースへのアクセスパターン。"""

    # 一般的な図書館データベースエンドポイント
    DATABASES = {
        'pressreader': {
            'base': 'https://www.pressreader.com',
            'auth': 'library_card',
            'content': '7,000 以上の新聞/雑誌'
        },
        'proquest': {
            'base': 'https://www.proquest.com',
            'auth': 'institutional',
            'content': 'ニュース、学位論文、文書'
        },
        'jstor': {
            'base': 'https://www.jstor.org',
            'auth': 'institutional',
            'content': '学術雑誌、書籍'
        },
        'nexis_uni': {
            'base': 'https://www.nexisuni.com',
            'auth': 'institutional',
            'content': '法律、ニュース、ビジネス'
        }
    }

    @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"""
    図書館間相互貸借リクエスト

    タイトル: {paper_info.get('title')}
    著者: {paper_info.get('authors')}
    ジャーナル: {paper_info.get('journal')}
    年: {paper_info.get('year')}
    DOI: {paper_info.get('doi')}
    巻/号: {paper_info.get('volume')}/{paper_info.get('issue')}
    ページ: {paper_info.get('pages')}

    リクエスト者: {library_email}
    """

    return request.strip()

地域制限コンテンツ向け VPN の使用

VPN が適切な場合

## ジャーナリスト/研究者向けの正当な VPN 使用例

### 適切:
- 地域固有のニュースソースへのアクセス
- コンテンツが他の国でどのように表示されるかの調査
- 政府の検閲の回避(一部の状況)
- 情報源との通信の保護
- 地域ターゲティングコンテンツの検証

### 不適切:
- 正当なアクセス制御の回避
- 契約上閲覧が禁止されているコンテンツへのアクセス
- アカウントに課された禁止やブロックの回避

VPN サービス比較

サービス最適な用途プライバシー速度価格
ExpressVPN検閲回避優れている速い$$$
NordVPN一般的な使用優れている速い$$
Surfshark低予算、無制限デバイス良い良い$
ProtonVPNプライバシー重視優れている中程度$$
Tor ブラウザ最大限の匿名性優れている遅い無料

地域制限ステータスの確認

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.edu
    """
    return []

倫理的ガイドライン

  1. 常に合法的な方法を最初に試す: 図書館データベース、オープンアクセスリポジトリ、著者への連絡。
  2. 利用規約を尊重する: ウェブサイトの ToS に違反する可能性のある自動化ツールやスクレイピングは避ける。
  3. 研究にのみ使用する: コンテンツを再公開したり、営利目的で使用したりしない。
  4. 帰属を守る: 情報源を適切に引用する。
  5. 著作権法を理解する: フェアユースと公正な取り扱いは地域によって異なる。
  6. ジャーナリストを支援する: 可能であれば、頻繁にアクセスするサイトにサブスクライブする。
  7. プライバシーに配慮する: 機密性の高い研究の場合は VPN を使用する。

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.

関連スキル