{"id":15945818,"url":"https://github.com/klieret/inspiderweb","last_synced_at":"2026-07-11T08:32:27.063Z","repository":{"id":98217184,"uuid":"93318259","full_name":"klieret/inspiderweb","owner":"klieret","description":"Analyze papers referencing each other. Extracts information from inspirehep, then describes the network in the dot language. Result can be plotted by dot, neato \u0026 Co.","archived":false,"fork":false,"pushed_at":"2017-10-05T08:01:07.000Z","size":146,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-24T22:24:02.443Z","etag":null,"topics":["dot-language","graph-description-language","inspirehep"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/klieret.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-04T14:18:24.000Z","updated_at":"2025-07-13T08:56:19.000Z","dependencies_parsed_at":"2023-05-18T16:45:56.185Z","dependency_job_id":null,"html_url":"https://github.com/klieret/inspiderweb","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/klieret/inspiderweb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klieret%2Finspiderweb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klieret%2Finspiderweb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klieret%2Finspiderweb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klieret%2Finspiderweb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/klieret","download_url":"https://codeload.github.com/klieret/inspiderweb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klieret%2Finspiderweb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35356473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dot-language","graph-description-language","inspirehep"],"created_at":"2024-10-07T09:07:09.394Z","updated_at":"2026-07-11T08:32:27.045Z","avatar_url":"https://github.com/klieret.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# InspiderWeb\n[Features](#features) | [Screenshots](#screenshots) | [How does it work?](#how-does-it-work) | [Limitations/Bugs](#limitationsbugs) | [Installation](#installation) | [Usage](#usage) | [Tutorial](#tutorial) | [Usage Examples](#usage-examples) | [License](#license)\n\nInspiderWeb is a tool to analyze networks papers referencing and citing each other. It gets its information from the [inspirehep](http://inspirehep.net/) API, then uses the [dot language](https://en.wikipedia.org/wiki/DOT_(graph_description_language)) to describe the network. The result can then be plotted by the [Graphviz Package](http://www.graphviz.org/) and similar programs.\n\n\n\n| Branch | Description | Travis |\n| -------| ----------- | ------ | \n| [master](https://github.com/klieret/inspiderweb/tree/master) | (Hopefully) stable release | [![Build Status](https://travis-ci.org/klieret/inspiderweb.svg?branch=master)](https://travis-ci.org/klieret/inspiderweb) | \n| [development](https://github.com/klieret/inspiderweb/tree/development)| Work on new features in progress. Might be completely broken from time to time. | [![Build Status](https://travis-ci.org/klieret/inspiderweb.svg?branch=development)](https://travis-ci.org/klieret/inspiderweb) | \n| [hotfixes](https://github.com/klieret/inspiderweb/tree/hotfixes) | Fixes that are then merged into most other branches | [![Build Status](https://travis-ci.org/klieret/inspiderweb.svg?branch=hotfixes)](https://travis-ci.org/klieret/inspiderweb) | \n| [webcrawling_legacy](https://github.com/klieret/inspiderweb/tree/webcrawling_legacy) | Legacy code that still uses webcrawling | [![Build Status](https://travis-ci.org/klieret/inspiderweb.svg?branch=webcrawling_legacy)](https://travis-ci.org/klieret/inspiderweb) | \n\n\n## Features\n\n* Supply additional custom labels for each of the nodes. \n* Clickable nodes which open the paper in inspirehep! For this to work, do not use the ```-Tpdf``` option (as it uses cairo which does not support hyperlinks). Instead do ```dot -Tps2 dotfile.dot \u003e tmp.ps \u0026\u0026 ps2pdf tmp.ps output.pdf```.  \n* Sort/rank papers by year!\n\n## Screenshots\n\nA small number of papers which reference each other, sorted by the year the papers were published:\n![opening picture](https://github.com/klieret/readme-files/blob/master/inspiderweb/opening.jpg)\n\nA big number of papers which reference each other, sorted by the year the papers were published: [PDF with clickable nodes](https://rawgit.com/klieret/readme-files/master/inspiderweb/clickable_dotfile_huge.pdf).\n\u003c!--Small network of some 15 nodes, sorted by year (plotted with ```dot```):--\u003e\n\u003c!--![by year](_small_by_year.png)--\u003e\n\u003c!--Plotting a small network of 17 nodes with ```dot```:--\u003e\n\u003c!--![dot](_small_dot.png)--\u003e\n\u003c!--Plotting a small network of 17 nodes with ```fdp```:--\u003e\n\u003c!--![fdp](_small_fdp.png)--\u003e\n\n\n## How does it work?\n\nStarting from some initial records (\"seeds\"), inspiderweb uses the inspirehep API to get references citations and other information. This information is then analyzed and used to generate an output in the [dot language](https://en.wikipedia.org/wiki/DOT_(graph_description_language)), describing the connections between (a subset of) the papers considered. This output can then be used by tools like ```dot```, ```fdp```, ```sfdp``` (provided by the [Graphviz Package](http://www.graphviz.org/)) to render the Graph as a ```.png```, ```.pdf``` and many more. \n\n## Limitations/Bugs\n\n* I didn't do too many tests and there's maybe more todo notes in the code than features itself, so don't expect everything to work right away!\n* Downloading the references/citations of a large number of papers will take its time. The script waits a few seconds after each download as to not strain the inspirehep capacities, so just let in run in the background for a couple of minutes and it should be done. \n* Right now all the downloaded information is saved as a python3 [pickle](https://docs.python.org/2/library/pickle.html) of ```Record``` objects. This clearly is the easiest choice, but definitely not the best one for bigger database scales. If anyone wants to implement this more elegantly or provide export possibilities to other database format, this is very welcome.\n\n\n## Installation\n\n1. Clone this archive via \n        \n        git clone https://github.com/klieret/inspiderweb\n    \n    or download the current version as a ```.zip``` by clicking [here](https://github.com/klieret/inspiderweb/archive/master.zip). \n    I assume you already have ```pythone3``` installed. \n    As for python \u003e= 3.5 it only uses the standard python libraries, for earlier version, you need to install the ```typing``` package, e.g. run\n    \n        sudo pip3 install typing\n\n2. Install graphviz. On most Linux systems this should already be in the repository, so\n\n        sudo apt-get install graphviz\n\n    or similar should do the job.\n    \n3. If you need to generate pdfs with clickable hyperlinks, you need the ```ps2pdf``` utility. E.g. run\n\n        sudo apt-get install ps2pdf\n\n## Intro/Usage\n\nSome terms which are used in the following:\n\n* ```record```: Record on inspirehep, representing a paper or a similar resource. Also the ```Record``` class, which is used to represent one record in inspiderweb.\n* ```recid```: The record id of a record, e.g. ```1472971``` for the the record at http://inspirehep.net/record/1472971/\n* ```bibkey```: The bibtex label provided by inspirehep, e.g. ```Davies:2016ruz``` for the above record (as can be checked in the bibtex output at http://inspirehep.net/record/1472971/export/hx)\n* ```seed```: Basically initial records that inspiderweb uses as starting point by downloading their references/citations etc. \n* ```database```: Inspiderweb caches all the downloaded information here. Basically a collection of ```Records``` together with some useful methods.\n\nUsually there are two steps involved to get the graph:\n\n1. Run ```inspiderweb```\n2. Use the ```graphviz``` package to plot a nice graph.\n\nThe ```graphviz``` package provides several nice tools that can be used.\n\n* ```dot```: For \"Hierarchical\" graphcs: ```dot -Tpdf dotfile.dot \u003e dotfile.pdf``` (to generate pdf output). This will be the most relevant command, especially for huge graphs.\n* ```fdp```: For \"Spring models\": ```dfp -Tpdf dotfile.dot \u003e dotfile.pdf``` (to generate pdf output) \n* ```sfdp```: Like ```fdp``` but scales better with bigger networks: ```dfp -Tpdf dotfile.dot \u003e dotfile.pdf``` (to generate pdf output)\n\nAll command line options of inspiderweb are described in the help message: Run ```python3 inspiderweb.py --help``` to get:\n```\nusage: python3 inspiderweb.py -d DATABASE [DATABASE ...] [-o OUTPUT]\n                              [-r RECIDPATHS [RECIDPATHS ...]]\n                              [-q QUERIES [QUERIES ...]]\n                              [-b BIBKEYPATHS [BIBKEYPATHS ...]]\n                              [-u URLPATHS [URLPATHS ...]] [-p [PLOT]]\n                              [-g GET [GET ...]] [-l LABELS] [-h]\n                              [--rank {year}] [-c CONFIG]\n                              [--maxseeds MAXSEEDS] [--forceupdate]\n                              [-v--verbosity {debug,info,warning,error,critical}]\n\n    INSPIDERWEB\n `.,-'\\_____/`-.,'     Tool to analyze networks papers referencing and citing each\n  /`..'\\ _ /`.,'\\      other. It acts as a web-crawler, extracting information from\n /  /`.,' `.,'\\  \\     inspirehep, then uses the dot languageto describe the\n/__/__/     \\__\\__\\__  network. The result can then be plotted by the graphviz\n\\  \\  \\     /  /  /    Package and similar programs.\n \\  \\,'`._,'`./  /     More info on the github page\n  \\,'`./___\\,'`./      https://github.com/klieret/inspiderweb\n ,'`-./_____\\,-'`.\n     /       \\\n\nSetup/Configure Options:\n  Supply in/output paths. Note that in most cases, seeds are only added to the database if we perform some action.\n\n  -d DATABASE [DATABASE ...], --database DATABASE [DATABASE ...]\n                        Pickle database (db) file. Multiple db files are\n                        supported. In this case the first one will be used to\n                        save the resulting merged db\n  -o OUTPUT, --output OUTPUT\n                        Output dot file.\n  -r RECIDPATHS [RECIDPATHS ...], --recidpaths RECIDPATHS [RECIDPATHS ...]\n                        Path of a file or a directory. Multiple pathsare\n                        supported. If the path points to a file, each line of\n                        the file is interpreted as a recid. The collected\n                        recidsare then used as seeds. If thepath points to a\n                        directory, we recursivelygo into it (excluding hidden\n                        files) and extract recids from every file.\n  -q QUERIES [QUERIES ...], --queries QUERIES [QUERIES ...]\n                        Take the results of inspirehep search query (search\n                        string you would enter in the inspirehep online search\n                        form) as seeds. Multiple search strings supported.\n  -b BIBKEYPATHS [BIBKEYPATHS ...], --bibkeypaths BIBKEYPATHS [BIBKEYPATHS ...]\n                        Path of a file or a directory. Multiple paths are\n                        supported. If the path points to a file, the file is\n                        searched for bibkeys, which are then used as seeds. If\n                        thepath points to a directory, we recursivelygo into\n                        it (excluding hidden files) and search every file for\n                        bibkeys.\n  -u URLPATHS [URLPATHS ...], --urlpaths URLPATHS [URLPATHS ...]\n                        Path of a file or a directory. If the path points to a\n                        file, the file is searched for inspirehep urls, from\n                        which the recids are extracted and used as seeds. If\n                        thepath points to a directory, we recursivelygo into\n                        it (excluding hidden files) and search every file for\n                        bibkeys.\n\nAction Options:\n  What do you want to do?\n\n  -p [PLOT], --plot [PLOT]\n                        Generate dot output (i.e. plot). If you do not specify\n                        an option, only connections between seeds are plotted\n                        (this is thesame as specifying 'seeds-seeds' or 's-s'.\n                        If you want to customize this, you can supply several\n                        rules of the following form: 'source\n                        selection'-'target selection'. The selectionsfor\n                        source targets are of the form {seeds,all}[.{refs,\n                        cites,refscites}]. Where e.g. seeds.refscites means\n                        that all recordsbeing cited by a seed or citing a seed\n                        are valid starting pointsof an arrow. Short options: s\n                        (seeds), a (all), r (refs), c (cites). For\n                        'refscites', the following alias exist: 'citesrefs',\n                        'cr', 'rc'.\n  -g GET [GET ...], --get GET [GET ...]\n                        Download information. Multiple arguments are\n                        supported. Each argument must look like this: Starts\n                        with 'seeds' or 'all' (depending on whether every db\n                        entry or just the seeds will be taken as starting\n                        point). Just 'seeds' (short 's') or 'all' (short 'a')\n                        will only download the bibliographic information for\n                        every item. Furthermore, there are the following\n                        options: (1) 'refs' (short 'r'): References of each\n                        recid (2) 'cites' (short 'c'): Citations of each recid\n                        (3) 'refscites' or 'citesrefs' (short 'rc' or 'cr'):\n                        both. These options can be chained, e.g.\n                        seeds.refs.cites means 1. For each seed recid, get all\n                        reference 2. For all of the above, get all citations.\n                        Similarly one could have written 's.r.c'.\n\nAdditional Options:\n  Further Configuration...\n\n  -l LABELS, --labels LABELS\n                        Add custom labels from this csv file. The file should\n                        start with a linecontaining the caption 'label' and\n                        one of 'recid', 'url', 'bibkey'.All fields should be\n                        separated by semicolons';'.Note that comments are not\n                        supprted right now, but all lines that do not contain\n                        enough fields will be skipped without an error message\n                        (which should have the same effect in most cases).\n  -h, --help            Print this help message.\n  --rank {year}         Rank by [year]\n  -c CONFIG, --config CONFIG\n                        Add config file to specify more settings such as the\n                        style of the nodes.Default value is\n                        'config/default.py'.\n  --maxseeds MAXSEEDS   Maximum number of seeds (for testing purposes).\n  --forceupdate         For all information that we get from the database:\n                        Force redownload\n  -v--verbosity {debug,info,warning,error,critical}\n                        Verbosity\n\n```\n\n## Tutorial\n\n### Basics\n\nIn the following I will always give two lines, the second with the shortcut options, the first one with the longer (and easier to understand options). Instead of ```python3 inspiderweb.py```, you can also use ```python3 inspiderweb.py``` linux (after setting the ```x``` privilege). Note that paths that contain spaces must be enclosed in quotation marks.\n\nDisplaying the help: \n\n    python3 inspiderweb.py --help\n    python3 inspiderweb.py --h\n      \nPrinting statistics about our database (will always be printed if we run the program). It will only be created, so it will look pretty bleak. Of course you can supply your own name for the database, here it's ```test.pickle``` (in the ```db``` folder).\n\n    python3 inspiderweb.py --database db/test.pickle\n    python3 inspiderweb.py -d db/test.pickle\n\nOutput:\n\n    WARNING: Could not load db from file.\n    INFO: ************** DATABASE STATISTICS ***************\n    INFO: Current number of records: 0\n    INFO: Current number of records with references: 0\n    INFO: Current number of records with citations: 0\n    INFO: Current number of records with cocitations: 0\n    INFO: Current number of records with bibkey: 0\n    INFO: **************************************************\n\n### Specifying seeds \u0026 Downloading information\n\nAdd a few seeds (the ids of inspirehep, i.e. the number ```811388``` from ```http://inspirehep.net/record/811388/```) and download the bibinfo and the references. For this we use the example file in ```seeds/example_small.txt```.\n\n    python3 inspiderweb.py --database db/test.pickle --recidpaths seeds/example_small.txt --get seeds.citesrefs\n    python3 inspiderweb.py -d db/test.pickle -r seeds/example_small.txt -g s.cr\n   \nThis can take some time (around a minute, mainly because the script waits quite often to not overload the inspirehep server), while we see output like: \n\n    INFO: Read 11 seeds from file seeds/example_small.txt.\n    DEBUG: Successfully saved db to db/test.pickle\n    DEBUG: Downloading bibfile of 1125962\n    DEBUG: Downloading from http://inspirehep.net/record/1125962/export/hx.\n    DEBUG: Download successfull. Sleeping for 3s.\n    DEBUG: Bibkey of 1125962 is Chatrchyan:2012gqa\n    DEBUG: Downloading references of 1125962\n    DEBUG: Downloading from http://inspirehep.net/record/1125962/references.\n    DEBUG: Download successfull. Sleeping for 3s.\n    DEBUG: 1125962 is citing 44 records\n    ...\n\nAfterwards, if we run the statistics again, we could see that we were successfull:\n\n    INFO: ************** DATABASE STATISTICS ***************\n    INFO: Current number of records: 618\n    INFO: Current number of records with references: 11\n    INFO: Current number of records with citations: 0\n    INFO: Current number of records with cocitations: 0\n    INFO: Current number of records with bibkey: 618\n    INFO: **************************************************\n\n### Plotting\n\nNow we are ready to plot the relations between these nodes:\n\n    python3 inspiderweb.py --database db/test.pickle --plot --recidpaths seeds/example_small.txt --output build/test.dot\n    python3 inspiderweb.py -d db/test.pickle -p -r seeds/example_small.txt -o build/test.dot\n\nThis will produce the file ```build/test.dot``` (I chose to place all of the output files in the ```build``` repository as to not make the repository dirty):\n\n    digraph g {\n        \n        // Formatting of the whole Graph\n    \n        graph [label=\"inspiderweb 2017-06-04 16:02:09.361469\", fontsize=40];\n        node[fontsize=20, fontcolor=black, fontname=Arial, style=filled, color=green];\t\n        \n        // Adding nodes (optional, but we want to have specific labels)\n        \n        \"591241\" [label=\"Sullivan:2002jt\" URL=\"http://inspirehep.net/record/591241\"];\n        \"855936\" [label=\"delAguila:2010mx\" URL=\"http://inspirehep.net/record/855936\"];\n        \"1111995\" [label=\"Chatrchyan:2012meb\" URL=\"http://inspirehep.net/record/1111995\"];\n        \"279185\" [label=\"Altarelli:1989ff\" URL=\"http://inspirehep.net/record/279185\"];\n        \"1125962\" [label=\"Chatrchyan:2012gqa\" URL=\"http://inspirehep.net/record/1125962\"];\n        \"892770\" [label=\"Grojean:2011vu\" URL=\"http://inspirehep.net/record/892770\"];\n        \"1322383\" [label=\"Aad:2014xea\" URL=\"http://inspirehep.net/record/1322383\"];\n        \"677093\" [label=\"Schmaltz:2005ky\" URL=\"http://inspirehep.net/record/677093\"];\n        \"1204603\" [label=\"Han:2012vk\" URL=\"http://inspirehep.net/record/1204603\"];\n        \n        // Connections\n\t\n        \"1204603\" -\u003e \"1111995\"; \n        \"1111995\" -\u003e \"279185\"; \n        \"1125962\" -\u003e \"1111995\"; \n        \"1125962\" -\u003e \"591241\"; \n        \"1322383\" -\u003e \"591241\"; \n        \"892770\" -\u003e \"591241\"; \n        \"1322383\" -\u003e \"1125962\"; \n        \"1125962\" -\u003e \"677093\"; \n        \"892770\" -\u003e \"855936\"; \n        \"1204603\" -\u003e \"892770\"; \n    }%                               \n\nNote that we could also have done all of the above with just one command:\n\n    python3 inspiderweb.py --database db/test.pickle --plot --recidpaths seeds/example_small.txt --get seeds.refs --output build/test.dot\n    python3 inspiderweb.py -d db/test.pickle -p -r seeds/example_small.txt -g s.r -o build/test.dot\n\nNote that running this should (basically) run straight through, without downloading anything, as all the information was saved in the database: This gives output like\n\n    ...\n    DEBUG: Skipping downloading of info.\n    DEBUG: Skipping downloading of references.\n    DEBUG: Skipping downloading of info.\n    DEBUG: Skipping downloading of references.\n    DEBUG: Skipping downloading of info.\n    DEBUG: Skipping downloading of references.\n    DEBUG: Successfully saved db to db/test.pickle\n    DEBUG: Skipping downloading of info.\n    DEBUG: Skipping downloading of references.\n    DEBUG: Skipping downloading of info.\n    DEBUG: Skipping downloading of references.\n    DEBUG: Skipping downloading of info.\n    DEBUG: Skipping downloading of references.\n    ...\n\nNow we are ready to use ```dot``` to plot this! The most basic command for ```.pdf``` output is:\n\n    dot -Tpdf build/test.dot \u003e build/test.pdf \n\nwhich gives us the following picture: \n\n![tutorial first picture](https://github.com/klieret/readme-files/blob/master/inspiderweb/tutorial.png)\n\nTo get ```.pdf``` output with clickable nodes, we cannot use ```-Tpdf``` however, but instead first have to generate a ```.ps``` which we then convert via the ```ps2pdf``` utility:\n\n    dot -Tps2 build/test.dot \u003e test.ps \u0026\u0026 ps2pdf build/test.ps build/test.pdf \n\nTo get the graph sorted by years, simply supply the ```--rank year``` option. Doing all of this in one line (connecting different commands with ```\u0026\u0026```):\n\n    python3 inspiderweb.py -d db/test.pickle -p --rank year -r seeds/example_small.txt -o build/test.dot \u0026\u0026 dot -Tps2 build/test.dot \u003e build/test.ps \u0026\u0026 ps2pdf build/test.ps build/test.pdf \n\n![tutorial year picture](https://github.com/klieret/readme-files/blob/master/inspiderweb/tutorial_year.png)\n\n## Usage Examples\n\nSee the tutorial for how to plot the dotfile. \n\n* Get all references for one paper and plot their relations: Look up the paper on inspirehep and get the recid from the url, then run\n    \n        python3 inspiderweb.py -d db/\u003cdb name\u003e.pickle -q \"refersto:recid:\u003cRECID\u003e\" -g seeds.refs -p -o build/\u003coutput name\u003e.dot \n  \n* I have a couple of documents in a folder that contain inspirehep bibkeys. I want to plot all the connections between these papers. \n\n        python3 inspiderweb.py -d db/\u003cdb name\u003e.pickle -b \u003cpath to folder\u003e -g seeds.refscites -p -o build/\u003coutput name\u003e.dot\n\n  If you instead only have a couple of documents, simply do ```-p \u003cpath1\u003e \u003cpath2\u003e ...```.\n  \n* I want to get the relations between all of the papers I authored:\n\n        python3 inspiderweb.py -d db/\u003cdb name\u003e.pickle -q \"a \u003cauthorname\u003e\" -g seeds.refs -p -o build/\u003coutput name\u003e.dot     \n\n## License\n\nMIT license. See file ```license.txt``` enclosed in the repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklieret%2Finspiderweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fklieret%2Finspiderweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklieret%2Finspiderweb/lists"}