@wentorai/research-plugins 1.4.0 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/curated/literature/README.md +2 -2
  2. package/curated/writing/README.md +1 -1
  3. package/package.json +1 -1
  4. package/skills/literature/discovery/SKILL.md +1 -1
  5. package/skills/literature/discovery/citation-alert-guide/SKILL.md +2 -2
  6. package/skills/literature/discovery/conference-proceedings-guide/SKILL.md +2 -2
  7. package/skills/literature/discovery/literature-mapping-guide/SKILL.md +1 -1
  8. package/skills/literature/discovery/paper-recommendation-guide/SKILL.md +8 -14
  9. package/skills/literature/discovery/rss-paper-feeds/SKILL.md +20 -14
  10. package/skills/literature/discovery/semantic-paper-radar/SKILL.md +8 -8
  11. package/skills/literature/discovery/semantic-scholar-recs-guide/SKILL.md +103 -86
  12. package/skills/literature/fulltext/open-access-guide/SKILL.md +1 -1
  13. package/skills/literature/fulltext/open-access-mining-guide/SKILL.md +5 -5
  14. package/skills/literature/metadata/citation-network-guide/SKILL.md +3 -3
  15. package/skills/literature/metadata/h-index-guide/SKILL.md +0 -27
  16. package/skills/literature/search/SKILL.md +1 -1
  17. package/skills/literature/search/citation-chaining-guide/SKILL.md +42 -32
  18. package/skills/literature/search/database-comparison-guide/SKILL.md +1 -1
  19. package/skills/literature/search/semantic-scholar-api/SKILL.md +56 -53
  20. package/skills/research/automation/paper-to-agent-guide/SKILL.md +1 -1
  21. package/skills/research/deep-research/in-depth-research-guide/SKILL.md +1 -1
  22. package/skills/research/deep-research/kosmos-scientist-guide/SKILL.md +3 -3
  23. package/skills/research/deep-research/llm-scientific-discovery-guide/SKILL.md +1 -1
  24. package/skills/research/deep-research/local-deep-research-guide/SKILL.md +6 -6
  25. package/skills/research/deep-research/open-researcher-guide/SKILL.md +3 -3
  26. package/skills/research/deep-research/tongyi-deep-research-guide/SKILL.md +4 -4
  27. package/skills/research/methodology/grad-school-guide/SKILL.md +1 -1
  28. package/skills/research/paper-review/automated-review-guide/SKILL.md +1 -1
  29. package/skills/tools/diagram/excalidraw-diagram-guide/SKILL.md +1 -1
  30. package/skills/tools/diagram/mermaid-architect-guide/SKILL.md +1 -1
  31. package/skills/tools/diagram/plantuml-guide/SKILL.md +1 -1
  32. package/skills/tools/document/grobid-pdf-parsing/SKILL.md +1 -1
  33. package/skills/tools/document/paper-parse-guide/SKILL.md +2 -2
  34. package/skills/tools/knowledge-graph/citation-network-builder/SKILL.md +5 -5
  35. package/skills/tools/knowledge-graph/knowledge-graph-construction/SKILL.md +1 -1
  36. package/skills/tools/scraping/academic-web-scraping/SKILL.md +1 -2
  37. package/skills/tools/scraping/google-scholar-scraper/SKILL.md +7 -7
  38. package/skills/writing/citation/SKILL.md +1 -1
  39. package/skills/writing/citation/academic-citation-manager/SKILL.md +20 -17
  40. package/skills/writing/citation/citation-assistant-skill/SKILL.md +72 -58
  41. package/skills/writing/citation/onecite-reference-guide/SKILL.md +1 -1
  42. package/skills/writing/citation/zotero-reference-guide/SKILL.md +1 -1
  43. package/skills/writing/citation/zotero-scholar-guide/SKILL.md +1 -1
  44. package/src/tools/arxiv.ts +3 -0
  45. package/src/tools/biorxiv.ts +19 -3
  46. package/src/tools/crossref.ts +3 -0
  47. package/src/tools/datacite.ts +3 -0
  48. package/src/tools/openalex.ts +6 -0
  49. package/src/tools/opencitations.ts +9 -0
  50. package/src/tools/orcid.ts +3 -0
  51. package/src/tools/pubmed.ts +3 -0
  52. package/src/tools/unpaywall.ts +3 -0
  53. package/src/tools/zenodo.ts +3 -0
@@ -17,7 +17,7 @@
17
17
  | [papers-we-love-guide](../../skills/literature/discovery/papers-we-love-guide/) | Community-curated directory of influential CS research papers |
18
18
  | [rss-paper-feeds](../../skills/literature/discovery/rss-paper-feeds/) | Set up RSS feeds and alerts to track new publications in your research area |
19
19
  | [semantic-paper-radar](../../skills/literature/discovery/semantic-paper-radar/) | Semantic literature discovery and synthesis using embeddings |
20
- | [semantic-scholar-recs-guide](../../skills/literature/discovery/semantic-scholar-recs-guide/) | Using Semantic Scholar recommendations API for paper discovery |
20
+ | [semantic-scholar-recs-guide](../../skills/literature/discovery/semantic-scholar-recs-guide/) | Paper discovery via recommendation APIs (OpenAlex, CrossRef citation networks) |
21
21
  | [zotero-arxiv-daily-guide](../../skills/literature/discovery/zotero-arxiv-daily-guide/) | Guide to Zotero arXiv Daily for personalized daily paper recommendations |
22
22
 
23
23
 
@@ -107,7 +107,7 @@
107
107
  | [plos-open-access-api](../../skills/literature/search/plos-open-access-api/) | Search PLOS open access journals with full-text Solr-powered API |
108
108
  | [pubmed-api](../../skills/literature/search/pubmed-api/) | Search biomedical literature and retrieve records via PubMed E-utilities |
109
109
  | [scielo-api](../../skills/literature/search/scielo-api/) | Access Latin American and developing world research via SciELO API |
110
- | [semantic-scholar-api](../../skills/literature/search/semantic-scholar-api/) | Search papers and analyze citation graphs via Semantic Scholar |
110
+ | [semantic-scholar-api](../../skills/literature/search/semantic-scholar-api/) | Search papers and analyze citation graphs via OpenAlex and CrossRef APIs |
111
111
  | [share-research-api](../../skills/literature/search/share-research-api/) | Discover open access research outputs via the SHARE notification API |
112
112
  | [systematic-search-strategy](../../skills/literature/search/systematic-search-strategy/) | Construct rigorous systematic search strategies for literature reviews |
113
113
  | [worldcat-search-api](../../skills/literature/search/worldcat-search-api/) | Search the world's largest library catalog via OCLC WorldCat API |
@@ -12,7 +12,7 @@
12
12
  |-------|-------------|
13
13
  | [academic-citation-manager](../../skills/writing/citation/academic-citation-manager/) | Manage academic citations across BibTeX, APA, MLA, and Chicago formats |
14
14
  | [bibtex-management-guide](../../skills/writing/citation/bibtex-management-guide/) | Clean, format, deduplicate, and manage BibTeX bibliography files for LaTeX |
15
- | [citation-assistant-skill](../../skills/writing/citation/citation-assistant-skill/) | Claude Code skill for citation workflow via Semantic Scholar |
15
+ | [citation-assistant-skill](../../skills/writing/citation/citation-assistant-skill/) | Claude Code skill for citation workflow via OpenAlex and CrossRef |
16
16
  | [citation-style-guide](../../skills/writing/citation/citation-style-guide/) | APA, MLA, Chicago citation format guide with CSL configuration |
17
17
  | [jabref-reference-guide](../../skills/writing/citation/jabref-reference-guide/) | Guide to JabRef open-source BibTeX and BibLaTeX reference manager |
18
18
  | [jasminum-zotero-guide](../../skills/writing/citation/jasminum-zotero-guide/) | Guide to Jasminum for retrieving CNKI Chinese academic metadata in Zotero |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wentorai/research-plugins",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "type": "module",
5
5
  "description": "438 academic research skills, 34 agent tools across 18 API modules, and 6 curated lists for Research-Claw and AI agents",
6
6
  "keywords": [
@@ -16,5 +16,5 @@ Select the skill matching the user's need, then `read` its SKILL.md.
16
16
  | [papers-we-love-guide](./papers-we-love-guide/SKILL.md) | Community-curated directory of influential CS research papers |
17
17
  | [rss-paper-feeds](./rss-paper-feeds/SKILL.md) | Set up RSS feeds and alerts to track new publications in your research area |
18
18
  | [semantic-paper-radar](./semantic-paper-radar/SKILL.md) | Semantic literature discovery and synthesis using embeddings |
19
- | [semantic-scholar-recs-guide](./semantic-scholar-recs-guide/SKILL.md) | Using Semantic Scholar recommendations API for paper discovery |
19
+ | [semantic-scholar-recs-guide](./semantic-scholar-recs-guide/SKILL.md) | Paper discovery via recommendation APIs (OpenAlex, CrossRef citation networks) |
20
20
  | [zotero-arxiv-daily-guide](./zotero-arxiv-daily-guide/SKILL.md) | Guide to Zotero arXiv Daily for personalized daily paper recommendations |
@@ -24,7 +24,7 @@ A skill for setting up automated citation alerts and tracking systems that notif
24
24
  | Web of Science | Citation alert, search alert, journal ToC | WoS-indexed journals | Institutional |
25
25
  | Scopus | Citation alert, search alert, author alert | Scopus-indexed journals | Institutional |
26
26
  | PubMed | Email alert (My NCBI) | Biomedical literature | Free |
27
- | Semantic Scholar | Paper alert, author alert, topic feed | CS, biomedical, broad | Free |
27
+ | OpenAlex | Work tracking, author profiles, concept feeds | All disciplines | Free |
28
28
  | ResearchGate | Author follow, recommendation | Member-uploaded papers | Free |
29
29
 
30
30
  ### Setting Up Google Scholar Alerts
@@ -76,7 +76,7 @@ def design_alert_system(research_topics: list[str],
76
76
  "frequency": "weekly"
77
77
  },
78
78
  "author_alerts": {
79
- "platform": "Semantic Scholar + Scopus",
79
+ "platform": "OpenAlex + Scopus",
80
80
  "authors": key_authors,
81
81
  "frequency": "monthly"
82
82
  },
@@ -36,7 +36,7 @@ Strategy 1 - Search by conference name:
36
36
  DBLP: Browse conference page -> search within proceedings
37
37
 
38
38
  Strategy 2 - Search by topic across all venues:
39
- Semantic Scholar: Filter by "Conference Paper" venue type
39
+ OpenAlex: Filter by type "proceedings-article"
40
40
  Google Scholar: Use keywords, then check venue names in results
41
41
 
42
42
  Strategy 3 - Track specific conferences:
@@ -101,7 +101,7 @@ Tiers vary by subfield. Always check the ranking relevant to your specific area.
101
101
  3. OpenReview: NeurIPS, ICLR, and others host papers with reviews
102
102
  4. Institutional repository: Check the authors' university repository
103
103
  5. Conference website: Some conferences offer free proceedings
104
- 6. Semantic Scholar: Aggregates PDFs from multiple open sources
104
+ 6. OpenAlex: Aggregates metadata and OA links from multiple sources
105
105
  ```
106
106
 
107
107
  ### Workshop Papers vs. Main Conference
@@ -51,7 +51,7 @@ How to use:
51
51
  Litmaps (litmaps.com) creates dynamic, multi-seed citation maps that update as new papers are published.
52
52
 
53
53
  Workflow:
54
- 1. Add one or more seed papers via DOI, title, or Semantic Scholar ID
54
+ 1. Add one or more seed papers via DOI, title, or OpenAlex ID
55
55
  2. The tool builds a citation graph showing how the papers are connected
56
56
  3. Add "discover" nodes to expand the map with algorithmically suggested papers
57
57
  4. Create "collections" to organize maps by topic
@@ -22,22 +22,16 @@ Whether you are entering a new field and need foundational papers, tracking the
22
22
 
23
23
  ## Algorithmic Recommendation Services
24
24
 
25
- ### Semantic Scholar Recommendations
25
+ ### OpenAlex Related Works
26
26
 
27
- Semantic Scholar provides a free recommendation API that suggests papers based on a set of seed papers you provide:
27
+ OpenAlex provides concept-based and citation-based discovery for 250M+ works across all disciplines:
28
28
 
29
29
  ```bash
30
- # Get recommendations based on positive and negative example papers
31
- curl -X POST "https://api.semanticscholar.org/recommendations/v1/papers/" \
32
- -H "Content-Type: application/json" \
33
- -d '{
34
- "positivePaperIds": ["CorpusId:12345", "CorpusId:67890"],
35
- "negativePaperIds": ["CorpusId:11111"],
36
- "fields": "title,authors,year,citationCount,url"
37
- }'
30
+ # Find works related to a specific paper via its concepts and citations
31
+ curl "https://api.openalex.org/works?filter=cites:W2741809807&sort=cited_by_count:desc&per_page=10"
38
32
  ```
39
33
 
40
- The positive/negative seed approach lets you steer recommendations toward the specific intersection of topics you care about. Start with 3-5 highly relevant papers as positive seeds and 1-2 off-topic papers as negative seeds.
34
+ Use OpenAlex's concept graph to find related work by browsing papers tagged with the same research concepts, or trace citation networks to find derivative and foundational papers.
41
35
 
42
36
  ### Connected Papers
43
37
 
@@ -70,7 +64,7 @@ Research Rabbit (researchrabbitapp.com) lets you build collections of papers and
70
64
  When algorithmic tools are insufficient, manual citation-based techniques remain powerful:
71
65
 
72
66
  ### Forward Citation Chaining
73
- Start with a foundational paper. Find all papers that cite it (using Google Scholar, Semantic Scholar, or Web of Science). Screen these citing papers by title and abstract to find relevant descendants. Repeat for the most important descendants.
67
+ Start with a foundational paper. Find all papers that cite it (using Google Scholar, OpenAlex, or Web of Science). Screen these citing papers by title and abstract to find relevant descendants. Repeat for the most important descendants.
74
68
 
75
69
  ### Backward Citation Mining
76
70
  Read the reference list of a key paper. Identify and retrieve the most important cited works. This traces the intellectual lineage of ideas and helps you find the seminal papers in a subfield.
@@ -89,7 +83,7 @@ A sustainable paper discovery practice requires more than one-off searches. Buil
89
83
 
90
84
  1. **Check preprint alerts**: Review your arXiv, bioRxiv, or SSRN email alerts or RSS feeds (15 min).
91
85
  2. **Scan citation alerts**: Review Google Scholar citation alerts for new papers citing your key references (10 min).
92
- 3. **Process recommendation queue**: Review suggestions from Semantic Scholar, Research Rabbit, or Connected Papers for any recently added seed papers (10 min).
86
+ 3. **Process recommendation queue**: Review suggestions from OpenAlex, Research Rabbit, or Connected Papers for any recently added seed papers (10 min).
93
87
  4. **Social signals**: Scan academic Twitter/Mastodon, relevant subreddits, or lab group Slack channels for shared papers (10 min).
94
88
  5. **Triage and queue**: Add promising papers to your "to read" queue with a priority tag (high/medium/low) and the reason you flagged them.
95
89
 
@@ -113,7 +107,7 @@ Finding papers outside your primary field is particularly challenging because yo
113
107
 
114
108
  ## References
115
109
 
116
- - Semantic Scholar API: https://api.semanticscholar.org
110
+ - OpenAlex API: https://api.openalex.org
117
111
  - Connected Papers: https://www.connectedpapers.com
118
112
  - Research Rabbit: https://www.researchrabbitapp.com
119
113
  - Paper Recommendation: https://github.com/pengzhenghao/paper-recommendation
@@ -95,34 +95,40 @@ Recommended: Set alerts for:
95
95
  - Key competitor or collaborator publications
96
96
  ```
97
97
 
98
- ### Semantic Scholar Alerts API
98
+ ### OpenAlex Citation Tracking
99
99
 
100
100
  ```python
101
101
  import requests
102
102
 
103
- def setup_semantic_scholar_alert(paper_id: str, email: str) -> dict:
103
+ def track_citations_openalex(work_id: str) -> dict:
104
104
  """
105
- Monitor citations for a specific paper via Semantic Scholar.
105
+ Monitor citations for a specific paper via OpenAlex.
106
106
 
107
107
  Args:
108
- paper_id: Semantic Scholar paper ID or DOI
109
- email: Email for notifications
108
+ work_id: OpenAlex work ID (e.g., 'W2741809807') or DOI
110
109
  """
111
- # Fetch current citation count for baseline
110
+ headers = {"User-Agent": "ResearchPlugins/1.0 (https://wentor.ai)"}
112
111
  response = requests.get(
113
- f"https://api.semanticscholar.org/graph/v1/paper/{paper_id}",
114
- params={'fields': 'title,citationCount,citations.title,citations.year'}
112
+ f"https://api.openalex.org/works/{work_id}",
113
+ headers=headers
115
114
  )
116
115
  data = response.json()
117
116
 
117
+ # Get recent citing works
118
+ citing_resp = requests.get(
119
+ "https://api.openalex.org/works",
120
+ params={"filter": f"cites:{work_id}", "sort": "publication_date:desc", "per_page": 10},
121
+ headers=headers
122
+ )
123
+ citing = citing_resp.json().get("results", [])
124
+
118
125
  return {
119
126
  'paper': data.get('title', ''),
120
- 'current_citations': data.get('citationCount', 0),
121
- 'recent_citations': [
122
- c for c in data.get('citations', [])
123
- if c.get('year', 0) >= datetime.now().year - 1
124
- ][:10],
125
- 'alert_email': email,
127
+ 'current_citations': data.get('cited_by_count', 0),
128
+ 'recent_citing_works': [
129
+ {'title': c.get('title'), 'year': c.get('publication_year')}
130
+ for c in citing
131
+ ],
126
132
  'status': 'configured'
127
133
  }
128
134
  ```
@@ -31,16 +31,16 @@ Key components:
31
31
  - **Vector database**: Stores and indexes embeddings for fast similarity search. Options include ChromaDB (local), Qdrant, Pinecone, or Weaviate.
32
32
  - **Similarity metric**: Cosine similarity is standard for comparing text embeddings.
33
33
 
34
- ### Using Semantic Scholar's Embedding Search
34
+ ### Using OpenAlex's Search API
35
35
 
36
- Semantic Scholar provides pre-computed SPECTER embeddings for millions of papers. You can use their search API for semantic queries:
36
+ OpenAlex indexes 250M+ works and supports search queries across all disciplines:
37
37
 
38
38
  ```bash
39
- # Semantic search via the Semantic Scholar API
40
- curl "https://api.semanticscholar.org/graph/v1/paper/search?query=attention+mechanisms+for+graph+neural+networks&fields=title,abstract,year,citationCount&limit=20"
39
+ # Search works via the OpenAlex API
40
+ curl "https://api.openalex.org/works?search=attention+mechanisms+for+graph+neural+networks&per_page=20"
41
41
  ```
42
42
 
43
- The search endpoint uses semantic matching, not just keyword matching. A query like "methods for handling missing values in longitudinal studies" will find papers about imputation techniques, dropout analysis, and panel data methods even if they do not use the phrase "missing values."
43
+ The search endpoint uses relevance-ranked matching. Combine with concept filters and citation data for more targeted discovery. For true semantic matching, build a local embedding index (see below).
44
44
 
45
45
  ### Building a Personal Semantic Index
46
46
 
@@ -84,7 +84,7 @@ This local index lets you search across all papers you have collected using natu
84
84
  Use semantic search to expand your awareness beyond your current reading:
85
85
 
86
86
  1. **Seed**: Take the abstract of your current paper (or a paragraph describing your research question).
87
- 2. **Search**: Run it as a semantic query against a large corpus (Semantic Scholar, OpenAlex, or your local index).
87
+ 2. **Search**: Run it as a semantic query against a large corpus (OpenAlex, CrossRef, or your local index).
88
88
  3. **Filter**: Remove papers you have already read. Sort by a combination of semantic similarity and recency.
89
89
  4. **Cluster**: Group the top 50 results into thematic clusters using k-means or HDBSCAN on their embeddings.
90
90
  5. **Explore clusters**: Each cluster represents a related subtopic. Read the most-cited paper in each cluster to understand the connection to your work.
@@ -103,7 +103,7 @@ Semantic search excels at finding papers from other fields that address similar
103
103
  Set up periodic semantic searches to detect new papers in your area:
104
104
 
105
105
  1. Define 3-5 "concept vectors" by encoding descriptions of your core research interests.
106
- 2. Weekly, search against newly published papers (last 7 days) from arXiv or Semantic Scholar.
106
+ 2. Weekly, search against newly published papers (last 7 days) from arXiv or OpenAlex.
107
107
  3. Rank new papers by maximum similarity to any of your concept vectors.
108
108
  4. Papers above your similarity threshold enter your reading queue automatically.
109
109
 
@@ -137,7 +137,7 @@ Compare your research question against the semantic landscape of existing work.
137
137
 
138
138
  ## References
139
139
 
140
- - Semantic Scholar API: https://api.semanticscholar.org
140
+ - OpenAlex API: https://api.openalex.org
141
141
  - SPECTER2 model: https://huggingface.co/allenai/specter2
142
142
  - ChromaDB: https://www.trychroma.com
143
143
  - ResearchGPT: https://github.com/mukulpatnaik/researchgpt
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: semantic-scholar-recs-guide
3
- description: "Using Semantic Scholar recommendations API for paper discovery"
3
+ description: "Paper discovery via recommendation APIs (OpenAlex, CrossRef citation networks)"
4
4
  metadata:
5
5
  openclaw:
6
6
  emoji: "🤖"
@@ -10,70 +10,72 @@ metadata:
10
10
  source: "wentor-research-plugins"
11
11
  ---
12
12
 
13
- # Semantic Scholar Recommendations Guide
13
+ # Paper Discovery via OpenAlex & CrossRef
14
14
 
15
- Leverage the Semantic Scholar (S2) API to discover related papers, traverse citation networks, and build comprehensive reading lists programmatically.
15
+ Leverage the OpenAlex and CrossRef APIs to discover related papers, traverse citation networks, and build comprehensive reading lists programmatically.
16
16
 
17
17
  ## Overview
18
18
 
19
- Semantic Scholar indexes over 200 million academic papers and provides a free, rate-limited API that supports:
19
+ OpenAlex indexes over 250 million academic works and provides a free, no-key-required API that supports:
20
20
 
21
- - Paper search by title, keyword, or DOI
22
- - Recommendations based on positive and negative seed papers
21
+ - Work search by title, keyword, or DOI
23
22
  - Citation and reference graph traversal
24
23
  - Author profiles and publication histories
25
- - Bulk data access for large-scale analyses
24
+ - Concept-based discovery across disciplines
25
+ - Institutional and venue filtering
26
26
 
27
- Base URL: `https://api.semanticscholar.org/graph/v1`
28
- Recommendations endpoint: `https://api.semanticscholar.org/recommendations/v1`
27
+ Base URL: `https://api.openalex.org`
28
+ CrossRef URL: `https://api.crossref.org`
29
29
 
30
- ## Getting Recommendations from Seed Papers
30
+ ## Finding Related Papers
31
31
 
32
- The recommendations endpoint accepts a list of positive (and optionally negative) paper IDs and returns related papers ranked by relevance.
32
+ Use OpenAlex's concept graph and citation data to discover related work from seed papers.
33
33
 
34
- ### Single-Paper Recommendations
34
+ ### Concept-Based Discovery
35
35
 
36
36
  ```python
37
37
  import requests
38
38
 
39
- PAPER_ID = "649def34f8be52c8b66281af98ae884c09aef38b" # SHA or S2 ID
39
+ HEADERS = {"User-Agent": "ResearchPlugins/1.0 (https://wentor.ai)"}
40
+ WORK_ID = "W2741809807" # OpenAlex work ID
40
41
 
42
+ # Get the seed paper's concepts
41
43
  response = requests.get(
42
- f"https://api.semanticscholar.org/recommendations/v1/papers/forpaper/{PAPER_ID}",
43
- params={
44
- "fields": "title,authors,year,citationCount,abstract,externalIds",
45
- "limit": 20
46
- },
47
- headers={"x-api-key": "YOUR_API_KEY"} # optional, increases rate limit
44
+ f"https://api.openalex.org/works/{WORK_ID}",
45
+ headers=HEADERS
48
46
  )
49
-
50
- for paper in response.json()["recommendedPapers"]:
51
- print(f"[{paper['year']}] {paper['title']} (citations: {paper['citationCount']})")
47
+ paper = response.json()
48
+ concepts = [c["id"] for c in paper.get("concepts", [])[:3]]
49
+
50
+ # Find works sharing the same concepts, sorted by citations
51
+ for concept_id in concepts:
52
+ related = requests.get(
53
+ "https://api.openalex.org/works",
54
+ params={"filter": f"concepts.id:{concept_id}", "sort": "cited_by_count:desc", "per_page": 10},
55
+ headers=HEADERS
56
+ )
57
+ for w in related.json().get("results", []):
58
+ print(f"[{w.get('publication_year')}] {w.get('title')} (citations: {w.get('cited_by_count')})")
52
59
  ```
53
60
 
54
- ### Multi-Paper Recommendations (Positive + Negative Seeds)
61
+ ### CrossRef Subject-Based Discovery
55
62
 
56
63
  ```python
57
64
  import requests
58
65
 
59
- payload = {
60
- "positivePaperIds": [
61
- "649def34f8be52c8b66281af98ae884c09aef38b",
62
- "ARXIV:2005.14165" # can use arXiv ID prefix
63
- ],
64
- "negativePaperIds": [
65
- "ArXiv:1706.03762" # exclude attention-is-all-you-need style papers
66
- ]
67
- }
68
-
69
- response = requests.post(
70
- "https://api.semanticscholar.org/recommendations/v1/papers/",
71
- json=payload,
72
- params={"fields": "title,year,citationCount,url,abstract", "limit": 30}
73
- )
74
-
75
- results = response.json()["recommendedPapers"]
76
- print(f"Found {len(results)} recommended papers")
66
+ def search_crossref(query, limit=10, sort="is-referenced-by-count"):
67
+ """Search CrossRef for papers sorted by citation count."""
68
+ resp = requests.get(
69
+ "https://api.crossref.org/works",
70
+ params={"query": query, "rows": limit, "sort": sort, "order": "desc"},
71
+ headers={"User-Agent": "ResearchPlugins/1.0 (https://wentor.ai; mailto:dev@wentor.ai)"}
72
+ )
73
+ return resp.json().get("message", {}).get("items", [])
74
+
75
+ results = search_crossref("transformer attention mechanism")
76
+ for w in results:
77
+ title = w.get("title", [""])[0] if w.get("title") else ""
78
+ print(f" {title} — Cited by: {w.get('is-referenced-by-count', 0)}")
77
79
  ```
78
80
 
79
81
  ## Citation Network Traversal
@@ -83,48 +85,49 @@ Walk the citation graph to discover foundational and derivative works.
83
85
  ### Forward Citations (Who Cited This Paper?)
84
86
 
85
87
  ```python
86
- paper_id = "649def34f8be52c8b66281af98ae884c09aef38b"
88
+ work_id = "W2741809807"
87
89
 
88
90
  response = requests.get(
89
- f"https://api.semanticscholar.org/graph/v1/paper/{paper_id}/citations",
91
+ "https://api.openalex.org/works",
90
92
  params={
91
- "fields": "title,year,citationCount,authors",
92
- "limit": 100,
93
- "offset": 0
94
- }
93
+ "filter": f"cites:{work_id}",
94
+ "sort": "cited_by_count:desc",
95
+ "per_page": 20
96
+ },
97
+ headers=HEADERS
95
98
  )
96
99
 
97
- citations = response.json()["data"]
98
- # Sort by citation count to find most influential derivative works
99
- citations.sort(key=lambda x: x["citingPaper"]["citationCount"], reverse=True)
100
- for c in citations[:10]:
101
- p = c["citingPaper"]
102
- print(f" [{p['year']}] {p['title']} ({p['citationCount']} cites)")
100
+ for w in response.json().get("results", []):
101
+ print(f" [{w.get('publication_year')}] {w.get('title')} ({w.get('cited_by_count')} cites)")
103
102
  ```
104
103
 
105
104
  ### Backward References (What Did This Paper Cite?)
106
105
 
107
106
  ```python
108
107
  response = requests.get(
109
- f"https://api.semanticscholar.org/graph/v1/paper/{paper_id}/references",
110
- params={"fields": "title,year,citationCount,authors", "limit": 100}
108
+ f"https://api.openalex.org/works/{work_id}",
109
+ headers=HEADERS
111
110
  )
111
+ paper = response.json()
112
+ ref_ids = paper.get("referenced_works", [])
112
113
 
113
- refs = response.json()["data"]
114
- refs.sort(key=lambda x: x["citedPaper"]["citationCount"], reverse=True)
114
+ # Fetch details for referenced works
115
+ for ref_id in ref_ids[:20]:
116
+ ref = requests.get(f"https://api.openalex.org/works/{ref_id.split('/')[-1]}", headers=HEADERS).json()
117
+ print(f" [{ref.get('publication_year')}] {ref.get('title')} ({ref.get('cited_by_count')} cites)")
115
118
  ```
116
119
 
117
120
  ## Building a Reading List Pipeline
118
121
 
119
- Combine search, recommendations, and citation traversal into a discovery pipeline:
122
+ Combine search, concept discovery, and citation traversal into a discovery pipeline:
120
123
 
121
124
  | Step | Method | Purpose |
122
125
  |------|--------|---------|
123
126
  | 1. Seed selection | Manual or keyword search | Identify 3-5 highly relevant papers |
124
- | 2. Expand via recs | Multi-paper recommendations | Find thematically related work |
125
- | 3. Forward citation | Citations endpoint | Find recent derivative works |
126
- | 4. Backward citation | References endpoint | Find foundational papers |
127
- | 5. Deduplicate | S2 paper ID matching | Remove duplicates across steps |
127
+ | 2. Expand via concepts | OpenAlex concept graph | Find thematically related work |
128
+ | 3. Forward citation | OpenAlex cites filter | Find recent derivative works |
129
+ | 4. Backward citation | referenced_works field | Find foundational papers |
130
+ | 5. Deduplicate | OpenAlex work ID matching | Remove duplicates across steps |
128
131
  | 6. Rank & filter | Sort by year, citations, relevance | Prioritize reading order |
129
132
 
130
133
  ```python
@@ -133,32 +136,46 @@ def build_reading_list(seed_ids, max_papers=50):
133
136
  seen = set()
134
137
  candidates = []
135
138
 
136
- # Step 1: Get recommendations
137
- recs = get_recommendations(seed_ids)
138
- for paper in recs:
139
- if paper["paperId"] not in seen:
140
- seen.add(paper["paperId"])
141
- candidates.append(paper)
142
-
143
- # Step 2: Get citations of seed papers
144
- for sid in seed_ids:
145
- cites = get_citations(sid, limit=50)
146
- for c in cites:
147
- pid = c["citingPaper"]["paperId"]
148
- if pid not in seen:
149
- seen.add(pid)
150
- candidates.append(c["citingPaper"])
151
-
152
- # Step 3: Rank by citation count and recency
153
- candidates.sort(key=lambda p: (p.get("year", 0), p.get("citationCount", 0)), reverse=True)
139
+ for seed_id in seed_ids:
140
+ # Get concepts from seed paper
141
+ paper = requests.get(f"https://api.openalex.org/works/{seed_id}", headers=HEADERS).json()
142
+ concept_ids = [c["id"] for c in paper.get("concepts", [])[:2]]
143
+
144
+ # Find related works via concepts
145
+ for cid in concept_ids:
146
+ related = requests.get(
147
+ "https://api.openalex.org/works",
148
+ params={"filter": f"concepts.id:{cid}", "sort": "cited_by_count:desc", "per_page": 20},
149
+ headers=HEADERS
150
+ ).json().get("results", [])
151
+ for w in related:
152
+ wid = w.get("id", "").split("/")[-1]
153
+ if wid not in seen:
154
+ seen.add(wid)
155
+ candidates.append(w)
156
+
157
+ # Get citing works
158
+ citing = requests.get(
159
+ "https://api.openalex.org/works",
160
+ params={"filter": f"cites:{seed_id}", "sort": "cited_by_count:desc", "per_page": 20},
161
+ headers=HEADERS
162
+ ).json().get("results", [])
163
+ for w in citing:
164
+ wid = w.get("id", "").split("/")[-1]
165
+ if wid not in seen:
166
+ seen.add(wid)
167
+ candidates.append(w)
168
+
169
+ # Rank by citation count and recency
170
+ candidates.sort(key=lambda p: (p.get("publication_year", 0), p.get("cited_by_count", 0)), reverse=True)
154
171
  return candidates[:max_papers]
155
172
  ```
156
173
 
157
- ## Rate Limits and Best Practices
174
+ ## Best Practices
158
175
 
159
- - **Without API key**: 100 requests per 5 minutes
160
- - **With API key**: 1 request/second sustained (request a key at semanticscholar.org/product/api)
161
- - Always include only the fields you need to reduce payload size
162
- - Use `offset` and `limit` for pagination on large result sets
176
+ - OpenAlex is free with no API key required; use a polite `User-Agent` header
177
+ - CrossRef requires a polite pool user agent with contact info for higher rate limits
178
+ - Always include only the fields you need via `select` parameter to reduce payload size
179
+ - Use `page` and `per_page` for pagination on large result sets
163
180
  - Cache responses locally to avoid redundant requests
164
- - Use DOI, arXiv ID, or PubMed ID as paper identifiers for cross-system compatibility (prefix with `DOI:`, `ARXIV:`, or `PMID:`)
181
+ - Use DOI as the universal identifier for cross-system compatibility
@@ -84,7 +84,7 @@ else:
84
84
  | SSRN | Preprint server | Social sciences, law, economics | ssrn.com |
85
85
  | Zenodo | Repository | All disciplines | zenodo.org |
86
86
  | CORE | Aggregator | 300M+ papers from repositories | core.ac.uk |
87
- | Semantic Scholar | Search + OA links | Cross-disciplinary | semanticscholar.org |
87
+ | OpenAlex | Search + OA links | Cross-disciplinary | openalex.org |
88
88
  | BASE (Bielefeld) | Aggregator | 400M+ documents | base-search.net |
89
89
 
90
90
  ### Batch OA Lookup
@@ -93,11 +93,11 @@ Unpaywall / OpenAlex:
93
93
  - Use: Find OA versions of any DOI
94
94
  - Best for: Locating freely available versions of papers
95
95
 
96
- Semantic Scholar:
97
- - Coverage: 200M+ papers, abstracts + some full text
98
- - Access: Free API, bulk datasets
99
- - Features: TLDR summaries, citation intents, S2ORC corpus
100
- - Best for: NLP research on scientific text
96
+ OpenAlex:
97
+ - Coverage: 250M+ works, all disciplines
98
+ - Access: Free API, no key required
99
+ - Features: Concepts, citation counts, author profiles, institution data
100
+ - Best for: Cross-disciplinary metadata and OA discovery
101
101
  ```
102
102
 
103
103
  ## Full-Text Retrieval and Parsing
@@ -49,7 +49,7 @@ Whether you are conducting a systematic literature review, mapping a new researc
49
49
 
50
50
  | Source | Coverage | API | Cost |
51
51
  |--------|----------|-----|------|
52
- | Semantic Scholar | 200M+ papers, CS/biomed focus | REST API, free | Free (rate limited) |
52
+ | OpenAlex | 250M+ works, all disciplines | REST API, free | Free (no key required) |
53
53
  | OpenAlex | 250M+ works, all disciplines | REST API, free | Free |
54
54
  | Crossref | 140M+ DOIs | REST API | Free |
55
55
  | Web of Science | Curated, multi-disciplinary | Institutional | Licensed |
@@ -219,7 +219,7 @@ Traditional citations take years to accumulate. Altmetrics capture immediate att
219
219
 
220
220
  ## Best Practices
221
221
 
222
- - **Combine multiple data sources.** No single database has complete coverage. Merge OpenAlex and Semantic Scholar for best results.
222
+ - **Combine multiple data sources.** No single database has complete coverage. Merge OpenAlex and CrossRef for best results.
223
223
  - **Normalize by field and age.** A 2024 paper in biology and a 2024 paper in mathematics have very different citation rate baselines.
224
224
  - **Use relative indicators.** Field-Weighted Citation Impact (FWCI) accounts for disciplinary differences.
225
225
  - **Do not equate citations with quality.** Retracted papers sometimes have high citation counts. Controversial papers accumulate criticism citations.
@@ -229,7 +229,7 @@ Traditional citations take years to accumulate. Altmetrics capture immediate att
229
229
  ## References
230
230
 
231
231
  - [OpenAlex API](https://docs.openalex.org/) -- Free, open bibliographic data
232
- - [Semantic Scholar API](https://api.semanticscholar.org/) -- AI-powered paper data
232
+ - [CrossRef API](https://api.crossref.org/) -- DOI resolution and metadata
233
233
  - [VOSviewer](https://www.vosviewer.com/) -- Bibliometric visualization tool
234
234
  - [bibliometrix R package](https://www.bibliometrix.org/) -- Comprehensive bibliometric analysis
235
235
  - [Altmetric](https://www.altmetric.com/) -- Alternative impact metrics
@@ -115,33 +115,6 @@ for source in results:
115
115
 
116
116
  Google Scholar profiles automatically display h-index and i10-index. No calculation needed, but coverage is the broadest (includes non-peer-reviewed sources).
117
117
 
118
- ### From Semantic Scholar API
119
-
120
- ```python
121
- def get_author_h_index(author_name):
122
- """Calculate h-index for an author using Semantic Scholar."""
123
- # Search for author
124
- search_resp = requests.get(
125
- "https://api.semanticscholar.org/graph/v1/author/search",
126
- params={"query": author_name, "limit": 1}
127
- )
128
- authors = search_resp.json().get("data", [])
129
- if not authors:
130
- return None
131
-
132
- author_id = authors[0]["authorId"]
133
-
134
- # Get all papers with citation counts
135
- papers_resp = requests.get(
136
- f"https://api.semanticscholar.org/graph/v1/author/{author_id}/papers",
137
- params={"fields": "citationCount", "limit": 1000}
138
- )
139
- papers = papers_resp.json().get("data", [])
140
- citation_counts = [p.get("citationCount", 0) for p in papers]
141
-
142
- return calculate_h_index(citation_counts)
143
- ```
144
-
145
118
  ### From OpenAlex
146
119
 
147
120
  ```python
@@ -36,7 +36,7 @@ Select the skill matching the user's need, then `read` its SKILL.md.
36
36
  | [plos-open-access-api](./plos-open-access-api/SKILL.md) | Search PLOS open access journals with full-text Solr-powered API |
37
37
  | [pubmed-api](./pubmed-api/SKILL.md) | Search biomedical literature and retrieve records via PubMed E-utilities |
38
38
  | [scielo-api](./scielo-api/SKILL.md) | Access Latin American and developing world research via SciELO API |
39
- | [semantic-scholar-api](./semantic-scholar-api/SKILL.md) | Search papers and analyze citation graphs via Semantic Scholar |
39
+ | [semantic-scholar-api](./semantic-scholar-api/SKILL.md) | Search papers and analyze citation graphs via OpenAlex and CrossRef APIs |
40
40
  | [share-research-api](./share-research-api/SKILL.md) | Discover open access research outputs via the SHARE notification API |
41
41
  | [systematic-search-strategy](./systematic-search-strategy/SKILL.md) | Construct rigorous systematic search strategies for literature reviews |
42
42
  | [worldcat-search-api](./worldcat-search-api/SKILL.md) | Search the world's largest library catalog via OCLC WorldCat API |