Module weheartpy.weheartpy
None
None
View Source
import requests
from bs4 import BeautifulSoup as bs
from .handler import Error, NoCollectionsFound, NoPostsFound, ConnectionError, NoUsersFound
from .models import Entry, Collection, User
class WeHeartIt():
'''
the WeHeartIt class.
eg. instantiating the class:
``
whi = WeHeartIt()
popular_posts = whi.popular()
``
'''
def __init__(self) -> None:
err = requests.get("https://weheartit.com")
try:
err.raise_for_status()
except requests.HTTPError:
raise ConnectionError(f"The API cannot connect to weheartit.com\nREASON: {err.reason}\nhelp: Try checking your network connection.")
self.status = err.status_code
self.url = err.url
def popular(self) -> list[Entry]:
'''
return a list of ``Entry`` objects of the popular images.
-
-
```
whi = WeHeartIt()
entries = whi.popular()
for entry in entries:
print(entry.id)
print(entry.username)
print(entry.image)
print(entry.url)
```
'''
res = requests.get("https://weheartit.com")
res = bs(res.text)
images = res.find_all('a', {'class': 'entry js-blc js-blc-t-heart btn-heart btn btn-heart-circle js-heart-button'})
entries = []
for img in images:
image = f"https://data.whicdn.com/images/{img['data-entry-id']}/original.jpg"
entry = Entry(id=int(img['data-entry-id']),
username=img['data-hearter-username'],
entry=img['href'],
image=image)
entries.append(entry)
if len(entries) == 0:
raise NoPostsFound('No posts were found. This might be a useragent or a website problem. Are you sure weheartit.com still has a popular images section?\nSOURCE: WeHeartIt.popular | match case "low"\n')
return
return entries
def search_collections(self, query: str) -> list[Collection]:
'''
return a list of ``Collection`` objects resulting from the query.
```
from weheartpy import WeHeartIt
whi = WeHeartIt()
cocs = whi.search_collections("anime pfp")
for c in cocs:
print(c.title, c.link)
```
'''
res = requests.get(f"https://weheartit.com/search/collections?query={query}&sort=most_recent")
find = bs(res.text)
atags = find.find_all('a', {'class':'js-blc js-blc-t-collection collection-name text-overflow-parent'})
collections = []
for a in atags:
link = a['href']
pop = bs(str(a))
title = pop.find_all('span', {'class': 'text-primary'})
title = (title[0]).text
username = pop.find_all('small')
username = (((username[0]).text).replace('by @', '')).strip()
collections.append(Collection(username=username, title=title, link=link))
if len(collections) == 0:
raise NoCollectionsFound("the API could not find any collections with that query! Try with something else.")
return
return collections
def search_entries(self, query: str, sort: str=None) -> list[Entry]:
'''
returns a list of ``Entry`` objects according to your search query.
+ params
+ + sort: `str`: sort the type of entries. Only one option `most_popular`. When left empty the API will go for most recent instead.
```
whi = WeHeartIt()
entries = whi.search_entries("mean girls", sort="most_popular")
for entry in entries:
print(entry.image, entry.url, entry.username)
```
'''
url = f"https://weheartit.com/search/entries?query={query}" if sort == None else f"https://weheartit.com/search/entries?query={query}&sort=most_popular"
res = requests.get()
find = bs(res.text, features="lxml")
entries = find.find_all('a', {'class': 'js-entry-detail-link js-blc js-blc-t-entry'})
usernames = find.find_all('a', {'class': 'entry js-blc js-blc-t-heart btn-heart btn btn-heart-circle js-heart-button'})
rentries = []
try:
for e, u in zip(entries, usernames):
image = "https://weheartit.com/images/" + u['data-entry-id'] + "/original.jpg"
id = int(u['data-entry-id'])
entry = Entry(id=id, title=e['title'], username=u['data-hearter-username'], entry=e['href'], image=image)
rentries.append(entry)
except:
raise NoPostsFound("Could not find any entries related to that search query. Try again with a different one or check your search query."); return
return rentries
def search_users(self, query: str) -> list[User]:
'''
returns a list of ``User``s according to search query. The number of users is limited to top 40 users thats relevant to your search query. The ``User`` object will return users usernames, names and links to their avatars.
+ params
+ + query: `str`: search query that you'd like to search.
```
whi = WeHeartIt()
hearters = whi.search_users("sophie")
for user in hearters:
print(user.name, user.username, user.avatar)
```
'''
res = requests.get(f"https://weheartit.com/search/users?query={query}")
find = bs(res.text, features="lxml")
entries = find.find_all('span', {'class': 'text-overflow'})
users = []
for e in entries:
e = bs(str(e), features="lxml")
name = (e.find('span', {'class': 'text-big'})).text.strip()
username = (e.find('small')).text[1:]
avatar = find.find('img', {'alt': f'{name}', 'class': 'avatar'})
avatar = avatar['src']
users.append(User(username=username, name=name, avatar=avatar))
if len(users) == 0: raise NoUsersFound("weheartpy could not find any users related to that search query. Try again with a different one or check your query.\n"); return
return users
Classes
WeHeartIt
class WeHeartIt(
)
View Source
class WeHeartIt():
'''
the WeHeartIt class.
eg. instantiating the class:
``
whi = WeHeartIt()
popular_posts = whi.popular()
``
'''
def __init__(self) -> None:
err = requests.get("https://weheartit.com")
try:
err.raise_for_status()
except requests.HTTPError:
raise ConnectionError(f"The API cannot connect to weheartit.com\nREASON: {err.reason}\nhelp: Try checking your network connection.")
self.status = err.status_code
self.url = err.url
def popular(self) -> list[Entry]:
'''
return a list of ``Entry`` objects of the popular images.
-
-
```
whi = WeHeartIt()
entries = whi.popular()
for entry in entries:
print(entry.id)
print(entry.username)
print(entry.image)
print(entry.url)
```
'''
res = requests.get("https://weheartit.com")
res = bs(res.text)
images = res.find_all('a', {'class': 'entry js-blc js-blc-t-heart btn-heart btn btn-heart-circle js-heart-button'})
entries = []
for img in images:
image = f"https://data.whicdn.com/images/{img['data-entry-id']}/original.jpg"
entry = Entry(id=int(img['data-entry-id']),
username=img['data-hearter-username'],
entry=img['href'],
image=image)
entries.append(entry)
if len(entries) == 0:
raise NoPostsFound('No posts were found. This might be a useragent or a website problem. Are you sure weheartit.com still has a popular images section?\nSOURCE: WeHeartIt.popular | match case "low"\n')
return
return entries
def search_collections(self, query: str) -> list[Collection]:
'''
return a list of ``Collection`` objects resulting from the query.
```
from weheartpy import WeHeartIt
whi = WeHeartIt()
cocs = whi.search_collections("anime pfp")
for c in cocs:
print(c.title, c.link)
```
'''
res = requests.get(f"https://weheartit.com/search/collections?query={query}&sort=most_recent")
find = bs(res.text)
atags = find.find_all('a', {'class':'js-blc js-blc-t-collection collection-name text-overflow-parent'})
collections = []
for a in atags:
link = a['href']
pop = bs(str(a))
title = pop.find_all('span', {'class': 'text-primary'})
title = (title[0]).text
username = pop.find_all('small')
username = (((username[0]).text).replace('by @', '')).strip()
collections.append(Collection(username=username, title=title, link=link))
if len(collections) == 0:
raise NoCollectionsFound("the API could not find any collections with that query! Try with something else.")
return
return collections
def search_entries(self, query: str, sort: str=None) -> list[Entry]:
'''
returns a list of ``Entry`` objects according to your search query.
+ params
+ + sort: `str`: sort the type of entries. Only one option `most_popular`. When left empty the API will go for most recent instead.
```
whi = WeHeartIt()
entries = whi.search_entries("mean girls", sort="most_popular")
for entry in entries:
print(entry.image, entry.url, entry.username)
```
'''
url = f"https://weheartit.com/search/entries?query={query}" if sort == None else f"https://weheartit.com/search/entries?query={query}&sort=most_popular"
res = requests.get()
find = bs(res.text, features="lxml")
entries = find.find_all('a', {'class': 'js-entry-detail-link js-blc js-blc-t-entry'})
usernames = find.find_all('a', {'class': 'entry js-blc js-blc-t-heart btn-heart btn btn-heart-circle js-heart-button'})
rentries = []
try:
for e, u in zip(entries, usernames):
image = "https://weheartit.com/images/" + u['data-entry-id'] + "/original.jpg"
id = int(u['data-entry-id'])
entry = Entry(id=id, title=e['title'], username=u['data-hearter-username'], entry=e['href'], image=image)
rentries.append(entry)
except:
raise NoPostsFound("Could not find any entries related to that search query. Try again with a different one or check your search query."); return
return rentries
def search_users(self, query: str) -> list[User]:
'''
returns a list of ``User``s according to search query. The number of users is limited to top 40 users thats relevant to your search query. The ``User`` object will return users usernames, names and links to their avatars.
+ params
+ + query: `str`: search query that you'd like to search.
```
whi = WeHeartIt()
hearters = whi.search_users("sophie")
for user in hearters:
print(user.name, user.username, user.avatar)
```
'''
res = requests.get(f"https://weheartit.com/search/users?query={query}")
find = bs(res.text, features="lxml")
entries = find.find_all('span', {'class': 'text-overflow'})
users = []
for e in entries:
e = bs(str(e), features="lxml")
name = (e.find('span', {'class': 'text-big'})).text.strip()
username = (e.find('small')).text[1:]
avatar = find.find('img', {'alt': f'{name}', 'class': 'avatar'})
avatar = avatar['src']
users.append(User(username=username, name=name, avatar=avatar))
if len(users) == 0: raise NoUsersFound("weheartpy could not find any users related to that search query. Try again with a different one or check your query.\n"); return
return users
Methods
popular
def popular(
self
) -> list[weheartpy.models.Entry]
return a list of Entry
objects of the popular images.
-
whi = WeHeartIt()
entries = whi.popular()
for entry in entries:
print(entry.id)
print(entry.username)
print(entry.image)
print(entry.url)
View Source
def popular(self) -> list[Entry]:
'''
return a list of ``Entry`` objects of the popular images.
-
-
```
whi = WeHeartIt()
entries = whi.popular()
for entry in entries:
print(entry.id)
print(entry.username)
print(entry.image)
print(entry.url)
```
'''
res = requests.get("https://weheartit.com")
res = bs(res.text)
images = res.find_all('a', {'class': 'entry js-blc js-blc-t-heart btn-heart btn btn-heart-circle js-heart-button'})
entries = []
for img in images:
image = f"https://data.whicdn.com/images/{img['data-entry-id']}/original.jpg"
entry = Entry(id=int(img['data-entry-id']),
username=img['data-hearter-username'],
entry=img['href'],
image=image)
entries.append(entry)
if len(entries) == 0:
raise NoPostsFound('No posts were found. This might be a useragent or a website problem. Are you sure weheartit.com still has a popular images section?\nSOURCE: WeHeartIt.popular | match case "low"\n')
return
return entries
search_collections
def search_collections(
self,
query: str
) -> list[weheartpy.models.Collection]
return a list of Collection
objects resulting from the query.
from weheartpy import WeHeartIt
whi = WeHeartIt()
cocs = whi.search_collections("anime pfp")
for c in cocs:
print(c.title, c.link)
View Source
def search_collections(self, query: str) -> list[Collection]:
'''
return a list of ``Collection`` objects resulting from the query.
```
from weheartpy import WeHeartIt
whi = WeHeartIt()
cocs = whi.search_collections("anime pfp")
for c in cocs:
print(c.title, c.link)
```
'''
res = requests.get(f"https://weheartit.com/search/collections?query={query}&sort=most_recent")
find = bs(res.text)
atags = find.find_all('a', {'class':'js-blc js-blc-t-collection collection-name text-overflow-parent'})
collections = []
for a in atags:
link = a['href']
pop = bs(str(a))
title = pop.find_all('span', {'class': 'text-primary'})
title = (title[0]).text
username = pop.find_all('small')
username = (((username[0]).text).replace('by @', '')).strip()
collections.append(Collection(username=username, title=title, link=link))
if len(collections) == 0:
raise NoCollectionsFound("the API could not find any collections with that query! Try with something else.")
return
return collections
search_entries
def search_entries(
self,
query: str,
sort: str = None
) -> list[weheartpy.models.Entry]
returns a list of Entry
objects according to your search query.
- params
-
- sort:
str
: sort the type of entries. Only one optionmost_popular
. When left empty the API will go for most recent instead.
- sort:
whi = WeHeartIt()
entries = whi.search_entries("mean girls", sort="most_popular")
for entry in entries:
print(entry.image, entry.url, entry.username)
View Source
def search_entries(self, query: str, sort: str=None) -> list[Entry]:
'''
returns a list of ``Entry`` objects according to your search query.
+ params
+ + sort: `str`: sort the type of entries. Only one option `most_popular`. When left empty the API will go for most recent instead.
```
whi = WeHeartIt()
entries = whi.search_entries("mean girls", sort="most_popular")
for entry in entries:
print(entry.image, entry.url, entry.username)
```
'''
url = f"https://weheartit.com/search/entries?query={query}" if sort == None else f"https://weheartit.com/search/entries?query={query}&sort=most_popular"
res = requests.get()
find = bs(res.text, features="lxml")
entries = find.find_all('a', {'class': 'js-entry-detail-link js-blc js-blc-t-entry'})
usernames = find.find_all('a', {'class': 'entry js-blc js-blc-t-heart btn-heart btn btn-heart-circle js-heart-button'})
rentries = []
try:
for e, u in zip(entries, usernames):
image = "https://weheartit.com/images/" + u['data-entry-id'] + "/original.jpg"
id = int(u['data-entry-id'])
entry = Entry(id=id, title=e['title'], username=u['data-hearter-username'], entry=e['href'], image=image)
rentries.append(entry)
except:
raise NoPostsFound("Could not find any entries related to that search query. Try again with a different one or check your search query."); return
return rentries
search_users
def search_users(
self,
query: str
) -> list[weheartpy.models.User]
returns a list of User
s according to search query. The number of users is limited to top 40 users thats relevant to your search query. The User
object will return users usernames, names and links to their avatars.
- params
-
- query:
str
: search query that you'd like to search.
- query:
whi = WeHeartIt()
hearters = whi.search_users("sophie")
for user in hearters:
print(user.name, user.username, user.avatar)
View Source
def search_users(self, query: str) -> list[User]:
'''
returns a list of ``User``s according to search query. The number of users is limited to top 40 users thats relevant to your search query. The ``User`` object will return users usernames, names and links to their avatars.
+ params
+ + query: `str`: search query that you'd like to search.
```
whi = WeHeartIt()
hearters = whi.search_users("sophie")
for user in hearters:
print(user.name, user.username, user.avatar)
```
'''
res = requests.get(f"https://weheartit.com/search/users?query={query}")
find = bs(res.text, features="lxml")
entries = find.find_all('span', {'class': 'text-overflow'})
users = []
for e in entries:
e = bs(str(e), features="lxml")
name = (e.find('span', {'class': 'text-big'})).text.strip()
username = (e.find('small')).text[1:]
avatar = find.find('img', {'alt': f'{name}', 'class': 'avatar'})
avatar = avatar['src']
users.append(User(username=username, name=name, avatar=avatar))
if len(users) == 0: raise NoUsersFound("weheartpy could not find any users related to that search query. Try again with a different one or check your query.\n"); return
return users