Communitygithub.com

majiayu000/claude-skill-registry

페이월(유료 장벽) 및 지역 제한 콘텐츠에 접근하기 위한 합법적 방법. 페이월 뒤의 연구, 학술 논문 접근, 지역 제한 우회, 또는 오픈 액세스 대안 찾기에 사용. Unpaywall, 도서관 데이터베이스, VPN 및 저널리스트와 연구자를 위한 윤리적 접근 전략을 다룹니다.

claude-skill-registry란 무엇인가요?

이 스킬은 저널리스트와 연구자가 유료 장벽 및 지역 제한 콘텐츠에 윤리적이고 합법적으로 접근할 수 있는 방법을 제공합니다. 가장 우선시되는 방법으로 도서관 데이터베이스(PressReader, ProQuest, JSTOR), 오픈 액세스 도구(Unpaywall, CORE, PubMed Central), 저자 직접 연락, 상호대차 서비스를 제시하며, 브라우저 리더 모드, 웨이백 머신 아카이브 등의 합법적 방법과 일부 주의가 필요한 방법(Archive.is, JavaScript 비활성화, VPN)을 계층적으로 안내합니다. 또한 학술 논문 접근을 위한 Unpaywall, CORE API, Semantic Scholar API의 상세한 Python 코드 예제를 제공하여 개발자들이 API를 통해 오픈 액세스 버전을 검색할 수 있도록 지원합니다. 지역 제한 콘텐츠에 대한 VPN 사용의 적절한 케이스(국가별 뉴스 연구, 검열 우회 등)와 부적절한 케이스(정당한 접근 제어 우회, 계약 위반)를 명확히 구분하며, 아카이브 기반 접근(Archive.today, Wayback Machine)과 Google Scholar 전략을 통해 최대한 윤리적으로 콘텐츠를 확보하는 방법을 설명합니다. 이 스킬은 Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 실행 가능하며, 주로 Python과 JavaScript를 사용한 자동화 스크립트를 통해 실제 작업에 활용될 수 있습니다.

지원 대상✓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천만 개 이상의 학술 논문에 대한 무료 합법적 사본을 찾아줍니다.

# 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억 9500만 개 논문)

# 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억 1400만 개 논문)

# 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': '도서관 카드',
            'content': '7000개 이상 신문/잡지'
        },
        'proquest': {
            'base': 'https://www.proquest.com',
            'auth': '기관',
            'content': '뉴스, 논문, 문서'
        },
        'jstor': {
            'base': 'https://www.jstor.org',
            'auth': '기관',
            'content': '학술 저널, 도서'
        },
        'nexis_uni': {
            'base': 'https://www.nexisuni.com',
            'auth': '기관',
            '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% 합법 - 인터넷 아카이브는 인정된 도서관입니다.
    (페이월 구현 전) 기사의 이전 버전이 있을 수 있습니다.
    """

    # 사용 가능 여부 확인
    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

    (번역 중단됨)

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.

관련 스킬