Package: libgen-api
Search Library Genesis programmatically using a simple Python library.Allows you to search Library Genesis by title or author, filter results, and resolve download links.ContentsGetting StartedBasic SearchingFiltered SearchingFiltered Title SearchingFiltered Author SearchingNon-exact Filtered SearchingFilter FieldsResolving mirror linksMore ExamplesFurther InformationTestingContributorsPlease ⭐ if you find this useful!Getting StartedInstall the package -pip install libgen-apiPerform a basic search -# search_title()fromlibgen_apiimportLibgenSearchs=LibgenSearch()results=s.search_title("Pride and Prejudice")print(results)Check out theresults layoutto see how the results data is formatted.Basic Searching:NOTE: All queries must be at least 3 characters long. This is to avoid any errors on the LibGen end (different mirrors have different requirements, but a minimum of 3 characters is the official limit).Search by title or author:Title:# search_title()fromlibgen_apiimportLibgenSearchs=LibgenSearch()results=s.search_title("Pride and Prejudice")print(results)Author:# search_author()fromlibgen_apiimportLibgenSearchs=LibgenSearch()results=s.search_author("Jane Austen")print(results)Filtered SearchingSkip to theExamplesYou can define a set of filters, and then use them to filter the search results that get returned.By default, filtering will remove results that do not match the filters exactly (case-sensitive) -This can be adjusted by settingexact_match=Falsewhen calling one of the filter methods, which allows for case-insensitive and substring filtering.Filtered Title Searching# search_title_filtered()fromlibgen_apiimportLibgenSearchtf=LibgenSearch()title_filters={"Year":"2007","Extension":"epub"}titles=tf.search_title_filtered("Pride and Prejudice",title_filters,exact_match=True)print(titles)Filtered Author Searching# search_author_filtered()fromlibgen_apiimportLibgenSearchaf=LibgenSearch()author_filters={"Language":"German","Year":"2009"}titles=af.search_author_filtered("Agatha Christie",author_filters,exact_match=True)print(titles)Non-exact Filtered Searching# search_author_filtered(exact_match = False)fromlibgen_apiimportLibgenSearchne_af=LibgenSearch()partial_filters={"Year":"200"}titles=ne_af.search_author_filtered("Agatha Christie",partial_filters,exact_match=False)print(titles)Filter FieldsYou can filter against any of the Library Genesis column names, which are given as -col_names=["ID","Author","Title","Publisher","Year","Pages","Language","Size","Extension","Mirror_1","Mirror_2","Mirror_3","Mirror_4","Mirror_5","Edit",]Resolving mirror linksThe mirror links returned in the results (ie. by running search_author() or search_title()) are not direct download links and do not resolve to a downloadable URL without further parsing.An additional method,resolve_download_links(), can be to resolve the mirror links of a search item into direct download links.TheMirror_1field is used byresolve_download_links()as the results generally contain the most useful URLs.This method accepts a single result (type: dictionary) from the array of searched results, and
returns a dictionary of all the download links forMirror_1(each mirror link has up to 4 download links):# resolve_download_links()fromlibgen_apiimportLibgenSearchs=LibgenSearch()results=s.search_author("Jane Austen")item_to_download=results[0]download_links=s.resolve_download_links(item_to_download)print(download_links)Example output:{"GET":"http://example.com/file.epub","Cloudflare":"http://example.com/file.epub","IPFS.io":"http://example.com/file.epub","Infura":"http://example.com/file.epub"}More ExamplesSee thetesting filefor more examples.Results LayoutResults are returned as a list of dictionaries:[{"Author":"John Smith","Edit":"http://example.com","Extension":"epub","ID":"00000","Language":"German","Mirror_1":"http://example.com","Mirror_2":"http://example.com","Mirror_3":"http://example.com","Mirror_4":"http://example.com","Mirror_5":"http://example.com","Pages":"410","Publisher":"Publisher","Size":"1005 Kb","Title":"Title","Year":"2021"}]Further informationIf there are no results, the library will return an empty array.All fields are strings.If a value is not present, the field will contain an empty string.Some listings will have page count listed in the form of "count[secondary-count]" as this is how they appear on Library Genesis.Only the first page of results (max. 25) will be returned.Testinglibgen-api uses Pytest to run unit tests.To run the tests -Clone this repo -git clone https://github.com/harrison-broadbent/libgen-api.git && cd libgen-apiInstall dependencies with -pip install .Run tests with -pytestContributorsA massive thank you to those that have contributed to this project!Please don't hesitate to raise an issue, or fork this project and improve on it.Thanks to the following contributors -calmooHENRYMARTIN5