Skip to content

Commit

Permalink
- added support for mode searching #2
Browse files Browse the repository at this point in the history
- release 1.4.1
  • Loading branch information
EchterAlsFake committed Aug 30, 2024
1 parent 1dbf712 commit cf9fff5
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 10 deletions.
5 changes: 4 additions & 1 deletion README/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,7 @@
- updated documentation

# 1.4
- fixed an issue with video loading
- fixed an issue with video loading

# 1.4.1
- added support for mode searching #2
10 changes: 7 additions & 3 deletions README/Documentation.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from re import search

# XNXX API Documentation

> - Version 1.4
> - Version 1.4.1
> - Author: Johannes Habel
> - Copyright (C) 2024
> - License: LGPLv3
Expand Down Expand Up @@ -127,7 +129,7 @@ from xnxx_api import search_filters

client = Client()
search = client.search("<query>", upload_time=search_filters.UploadTime.month, length=search_filters.Length.X_0_10min,
searching_quality=search_filters.SearchingQuality.X_720p)
searching_quality=search_filters.SearchingQuality.X_720p, mode=search_filters.Mode.default)
# this is an example

for video in search.videos:
Expand Down Expand Up @@ -185,6 +187,7 @@ Currently, there are three filters available:
- Searching Quality
- Upload Time
- Length
- Mode

They are located in:

Expand All @@ -193,7 +196,8 @@ from xnxx_api import search_filters
from xnxx_api.xnxx_api import Client
# Use them like this:

search = Client().search("<query>", length=search_filters.Length.X_0_10min, upload_time=search_filters.UploadTime.year, searching_quality=search_filters.SearchingQuality.X_1080p_plus)
search = Client().search("<query>", length=search_filters.Length.X_0_10min, upload_time=search_filters.UploadTime.year,
searching_quality=search_filters.SearchingQuality.X_1080p_plus, mode=search_filters.Mode.default)
videos = search.videos
# I think the names explain what it does :)
```
5 changes: 5 additions & 0 deletions xnxx_api/modules/search_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,8 @@ class UploadTime:
class SearchingQuality:
X_720p = "/hd-only"
X_1080p_plus = "/fullhd"

class Mode:
default = ""
hits = "/hits"
random = "/random"
17 changes: 11 additions & 6 deletions xnxx_api/xnxx_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,11 +165,14 @@ def content_url(self) -> str:


class Search:
def __init__(self, query: str, upload_time: UploadTime, length: Length, searching_quality: SearchingQuality):
def __init__(self, query: str, upload_time: UploadTime, length: Length, searching_quality: SearchingQuality,
mode: Mode):

self.query = self.validate_query(query)
self.upload_time = upload_time
self.length = length
self.searching_quality = searching_quality
self.mode = mode

@classmethod
def validate_query(cls, query):
Expand All @@ -178,7 +181,7 @@ def validate_query(cls, query):
@cached_property
def html_content(self):
# Now this is going to be weird, just don't ask
return Core().get_content(f"https://www.xnxx.com/search{self.upload_time}{self.length}{self.searching_quality}/{self.query}", headers=HEADERS).decode("utf-8")
return Core().get_content(f"https://www.xnxx.com/search{self.mode}{self.upload_time}{self.length}{self.searching_quality}/{self.query}", headers=HEADERS).decode("utf-8")

@cached_property
def total_pages(self):
Expand All @@ -190,10 +193,10 @@ def videos(self):
while True:

if page == 0:
url = f"https://www.xnxx.com/search{self.upload_time}{self.length}{self.searching_quality}/{self.query}"
url = f"https://www.xnxx.com/search{self.mode}{self.upload_time}{self.length}{self.searching_quality}/{self.query}"

else:
url = f"https://www.xnxx.com/search{self.upload_time}{self.length}{self.searching_quality}/{self.query}/{page}"
url = f"https://www.xnxx.com/search{self.mode}{self.upload_time}{self.length}{self.searching_quality}/{self.query}/{page}"

content = Core().get_content(url, headers=HEADERS).decode("utf-8")
urls = REGEX_SCRAPE_VIDEOS.findall(content)
Expand Down Expand Up @@ -255,15 +258,17 @@ def get_video(cls, url):
return Video(url)

@classmethod
def search(cls, query, upload_time: UploadTime = "", length: Length = "", searching_quality: SearchingQuality = ""):
def search(cls, query, upload_time: UploadTime = "", length: Length = "", searching_quality: SearchingQuality = "",
mode: Mode = ""):
"""
:param query:
:param upload_time:
:param length:
:param searching_quality:
:param mode:
:return: (Search) the search object
"""
return Search(query, upload_time, length, searching_quality)
return Search(query, upload_time, length, searching_quality, mode)

@classmethod
def get_user(cls, url):
Expand Down

0 comments on commit cf9fff5

Please sign in to comment.