# Wikimedia Plugin for Navidrome
A Navidrome plugin that fetches artist metadata from Wikidata, DBpedia, and Wikipedia.
## Generating the Plugin
This plugin was generated using the XTP CLI:
```bash
xtp plugin init \
--schema-file plugins/schemas/metadata_agent.yaml \
--template go \
--path ./wikimedia \
--name wikimedia-plugin
```
## Features
- **Artist URL**: Fetches Wikipedia URL for an artist using Wikidata (by MBID or name), DBpedia, or falls back to a Wikipedia search URL
- **Artist Biography**: Fetches the introductory text from the artist's Wikipedia page
- **Artist Images**: Fetches artist images from Wikidata
## Building
### Using TinyGo
tinygo build -target wasip1 -buildmode=c-shared -o plugin.wasm .
zip -j wikimedia.ndp manifest.json plugin.wasm
### Using the Makefile
From the `plugins/examples` directory:
make wikimedia.ndp
### Using XTP CLI
xtp plugin build
zip -j wikimedia.ndp manifest.json dist/plugin.wasm
## Installation
Copy the `.ndp` file to your Navidrome plugins folder:
cp wikimedia.ndp /path/to/navidrome/plugins/
Then enable plugins in your `navidrome.toml`:
```toml
[Plugins]
Enabled = true
Folder = "/path/to/navidrome/plugins"
Add the plugin to your agents list:
Agents = "lastfm,spotify,wikimedia"
## Testing with Extism CLI
Install the [Extism CLI](https://extism.org/docs/install):
brew install extism/tap/extism # macOS
# or see https://extism.org/docs/install for other platforms
Extract the wasm file from the package and test:
# Extract wasm from package
unzip -p wikimedia.ndp plugin.wasm > wikimedia.wasm
# Test artist URL lookup with MBID (The Beatles)
extism call wikimedia.wasm nd_get_artist_url --wasi \
--input '{"id":"1","name":"The Beatles","mbid":"b10bbbfc-cf9e-42e0-be17-e2c3e1d2600d"}' \
--allow-host "query.wikidata.org"
Expected output:
```json
{"url":"https://en.wikipedia.org/wiki/The_Beatles"}
### Test artist biography
extism call wikimedia.wasm nd_get_artist_biography --wasi \
--allow-host "query.wikidata.org" \
--allow-host "en.wikipedia.org"
### Test artist images
extism call wikimedia.wasm nd_get_artist_images --wasi \
{"images":[{"url":"http://commons.wikimedia.org/wiki/Special:FilePath/Beatles%20ad%201965%20just%20the%20beatles%20crop.jpg","size":0}]}
## Project Structure
wikimedia/
├── main.go # Plugin implementation with Wikimedia API logic
├── pdk.gen.go # Generated types and export wrappers (DO NOT EDIT)
├── go.mod # Go module file
├── go.sum # Go module checksums
├── prepare.sh # Build preparation script
└── xtp.toml # XTP plugin configuration
## API Endpoints Used
| Service | Endpoint | Purpose |
|-----------|--------------------------------------|-----------------------------------------------------------|
| Wikidata | `https://query.wikidata.org/sparql` | SPARQL queries for Wikipedia URLs and images |
| DBpedia | `https://dbpedia.org/sparql` | Fallback SPARQL queries for Wikipedia URLs and short bios |
| Wikipedia | `https://en.wikipedia.org/w/api.php` | MediaWiki API for article extracts |
## Implemented Functions
| Function | Description |
|---------------------------|-----------------------------------------------|
| `nd_manifest` | Returns plugin manifest with HTTP permissions |
| `nd_get_artist_url` | Returns Wikipedia URL for an artist |
| `nd_get_artist_biography` | Returns artist biography from Wikipedia |
| `nd_get_artist_images` | Returns artist image URLs from Wikidata |