Skip to content

Atronar/DerPyBooruPhi

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DerPyBooruPhi

Python bindings for Philomena-based boorus' API like Ponybooru, Derpibooru, etc.

License: Simplified BSD License

Version: 0.10.6

Features

  • High-level abstraction over Philomena's REST API
  • Parameter chaining for ease of manipulation
  • Syntactic sugar for queries, e.g., "query.score >= 100" compiling to "score.gte:100"
  • Design focusing on iterables and lazy generation for network efficiency

Dependencies

  • python3.8 or newer
  • requests

How to install

Python 3.x

$ pip3 install derpybooruphi

Checking documentation

Python 3.x

$ pydoc3 derpibooru

Typical usage

Getting images currently on Derpibooru's front page

from derpibooru import Search

for image in Search():
  id_number, score, tags = image.id, image.score, ", ".join(image.tags)
  print("#{} - score: {:>3} - {}".format(id_number, score, tags))

Searching posts by tag

from derpibooru import Search

for image in Search().query("rarity", "twilight sparkle"):
  print(image.url)

Getting images from other booru

from derpibooru import Search

for image in Search(url_domain='https:\\your.booru.example').query("rarity", "twilight sparkle"):
  print(image.url)

Crawling Derpibooru from first to last post

from derpibooru import Search

# This is only an example and shouldn't be used in practice as it abuses
# Derpibooru's licensing terms
for image in Search().ascending().limit(None):
  id_number, score, tags = image.id, image.score, ", ".join(image.tags)
  print("#{} - score: {:>3} - {}".format(id_number, score, tags))

Getting random posts

from derpibooru import Search, sort

for post in Search().sort_by(sort.RANDOM):
  print(post.url)

Getting top 100 posts

from derpibooru import Search, sort

top_scoring = [post for post in Search().sort_by(sort.SCORE).limit(100)]

Storing and passing new search parameters

from derpibooru import Search, sort

params = Search().sort_by(sort.SCORE).limit(100).parameters

top_scoring = Search(**params)
top_animated = top_scoring.query("animated")

Filtering by metadata

from derpibooru import Search, query

q = {
  "wallpaper",
  query.width == 1920,
  query.height == 1080,
  query.score >= 100
}

wallpapers = [image for image in Search().query(*q)]

Getting the latest images from a watchlist

from derpibooru import Search, user

key = "your_api_key"

for post in Search().key(key).watched(user.ONLY):
  id_number, score, tags = post.id, post.score, ", ".join(post.tags)
  print("#{} - score: {:>3} - {}".format(id_number, score, tags))

Changes in fork

  • Only python >=3.8
  • Available using proxies
  • Extended Search and Image (like paging, getting top, ratings, reverse search, etc.)
  • Getting Image data by id:
  i_want_ponies_ponified = Image(None,image_id=0)
  print(i_want_ponies_ponified.url)
  • Getting comments:
  for image in Search():
    for comment in image.comments:
      print(f"{comment.author}: {comment.body}")

And by id:

  which_video = Comment(None, comment_id=1000)
  print("Comment from",which_video.image_id)
  • Work with tags: category, alliaces, implies, etc.
  • Getting profiles
  • Getting filters
  • Getting galleries
  • Work with forums
  • Updated sort and query lists
  • Posting images:
  new_img = PostImage().key(API_KEY).image_url("https://pbs.twimg.com/media/EW4YtdmWAAEPaae.png:orig").description(description).tag_input("safe", "artist:dilarus", "ts", "pp").source_url("https://twitter.com/Dilarus/status/1255968549052583941")
  posted_img = new_img.post()
  id_number, score, tags = posted_img.id, posted_img.score, ", ".join(posted_img.tags)

About

Python bindings for Derpibooru's API

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%