Source code for py_casim.casim

"""Code to upload an image and get his share url."""

import logging
from pathlib import Path

import requests

from .tools import (get_all_shares, get_all_shares_loggedin, get_folder_id,
                    get_image_id, get_share, get_share_loggedin)

logger = logging.getLogger(__name__)


[docs]class Casim(): """Upload image to Casimages and get share url/code.""" # CASIMAGES _url = "https://www.casimages.com/" _url_upload = "https://www.casimages.com/upload_ano_multi.php" _url_casi_share = "https://www.casimages.com/codes_ano_multi.php" _url_resize = "https://www.casimages.com/ajax/s_ano_resize.php" #: Valid resize values for resize keyword argument resize_values = ["100", "125", "320", "640", "800", "1024", "1280", "1600"] _headers = { "Accept": "application/json", "Accept-Language": "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate, br", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0", # noqa: E501 "Cache-Control": "no-cache", "Connection": "keep-alive", "Pragma": "no-cache", "X-Requested-With": "XMLHttpRequest" } def __init__(self, image, resize=None): """Init Casim() object with image path, and optionnal resize value.""" self.image = image self.resize = resize if str(resize) in self.resize_values else None self.image_id = None self.session = requests.Session() # Session (keep cookies) self.session.get(Casim._url) # Init for cookies self._set_resize() logger.info('casim created with image: "%s" and resize: %s', self.image, self.resize) def __repr__(self): return f'Casim({self.image}, resize={self.resize})' def _set_resize(self): if self.resize: params = {"dim": self.resize} self.session.get(Casim._url_resize, params=params) logger.info('ask for resize with value %s', self.resize) def _upload_image(self): """Upload image and return id.""" with open(self.image, 'rb') as f: file_ = {'Filedata': ('image', f, 'image/jpg')} r = self.session.post(Casim._url_upload, files=file_, headers=Casim._headers) self.image_id = r.text # casimages share page ID logger.info('upload is ok, image id is %s', self.image_id) return self.image_id def _get_share(self, index=None): """Get share link/code. Args: index (int, optional): sqdfsdf. Defaults to None. 0 : Direct link (Mail & Messenger) 1 : Direct link (Forum, Blog, Site) 2 : HTML Code Thumbnail 3 : HTML Code Big 4 : Forum BBCode Thumbnail 5 : Forum BBCode Big 6 : Source Link Thumbnail 7 : Source Link Big Returns: str (or list): image share url (or list of share urls) """ params = {"img": self.image_id} r = self.session.get(Casim._url_casi_share, params=params) logger.info('get() on share page returns code : %d', r.status_code) return get_share(r.text, index) if index else get_all_shares(r.text)
[docs] def get_share_code(self, index=0): """Get share link/code. Args: index (int, optional): Url/code choice. Defaults to 0. 0 : Direct link (Mail & Messenger) 1 : Direct link (Forum, Blog, Site) 2 : HTML Code Thumbnail 3 : HTML Code Big 4 : Forum BBCode Thumbnail 5 : Forum BBCode Big 6 : Source Link Thumbnail 7 : Source Link Big Returns: str: image share url/code """ self._upload_image() return self._get_share(index)
[docs] def get_all(self): """Get list of all links/code. * Direct link (Mail & Messenger) * Direct link (Forum, Blog, Site) * HTML Code Thumbnail * HTML Code Big * Forum BBCode Thumbnail * Forum BBCode Big * Source Link Thumbnail * Source Link Big Returns: list -- all image share codes/links """ self._upload_image() return self._get_share()
[docs]class CasimLogged(): """Upload image to Casimages account and get share url/code.""" # CASIMAGES _url = "https://www.casimages.com/" _url_login = "https://www.casimages.com/connexion" _url_resize = "https://www.casimages.com/ajax/m_photos_p_resize.php" _url_upload = "https://www.casimages.com/upload_mb_dz_img.php" _url_casi_share = "https://www.casimages.com/ajax/m_photos_codes_img.php" # noqa: E501 _url_m_photos = "https://www.casimages.com/m_photos" _url_search = "https://www.casimages.com/m_rechercher" #: Valid resize values for resize keyword argument resize_values = ["100", "125", "320", "640", "800", "1024", "1280", "1600"] _headers = { "Accept": "application/json", "Accept-Language": "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate, br", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0", # noqa: E501 "Cache-Control": "no-cache", "Connection": "keep-alive", "Pragma": "no-cache", "X-Requested-With": "XMLHttpRequest" } def __init__(self, image, resize=None): """Init Casim() object with image path, and optionnal resize value.""" self.image = Path(image) self.resize = resize if str(resize) in self.resize_values else None self.image_id = None self.loggedin = False self.session = requests.Session() # Session (keep cookies) self.session.get(Casim._url) # Init for cookies logger.info('casim created with image: "%s" and resize: %s', self.image, self.resize) def __repr__(self): return f'Casim({self.image}, resize={self.resize})'
[docs] def login(self, email, mdp): """Connect to Casimages with your own account.""" self.session.get(CasimLogged._url_login) payload = {"email": email, "mdp": mdp} self.session.post(CasimLogged._url_login, data=payload) self.loggedin = True
[docs] def change_folder(self, name): """Change destination folder. Folder named "name" should exist.""" r = self.session.get(CasimLogged._url_m_photos) folder_id = get_folder_id(r.text, name) if folder_id: payload = {"alb": folder_id} r = self.session.get(CasimLogged._url_m_photos, params=payload)
def _set_resize(self): if self.resize: params = {"dim": self.resize} self.session.get(self._url_resize, params=params) logger.info('ask for resize with value %s', self.resize) def _upload_image(self): """Upload image and return id.""" self._set_resize() with open(self.image, 'rb') as f: file_ = {'Filedata': (self.image.name, f, 'image/jpg')} self.session.post(CasimLogged._url_upload, files=file_, headers=CasimLogged._headers) logger.info('upload is ok') def _get_share(self, index=None): """Get share link/code. Args: index (int, optional): sqdfsdf. Defaults to None. 0 : Direct link (Mail & Messenger) 1 : Direct link (Forum, Blog, Site) 2 : HTML Code Thumbnail 3 : HTML Code Big 4 : Forum BBCode Thumbnail 5 : Forum BBCode Big 6 : Source Link Thumbnail 7 : Source Link Big Returns: str (or list): image share url (or list of share urls) """ payload = {"wf": "images", "q": self.image.name} r = self.session.post(CasimLogged._url_search, params=payload) image_id = get_image_id(r.text, self.image.name) if image_id: params = {"codimg": image_id} r = self.session.get(CasimLogged._url_casi_share, params=params) return get_share_loggedin(r.text, index) if index else get_all_shares_loggedin(r.text) # noqa: E501
[docs] def get_share_code(self, index=0): """Get share link/code. Args: index (int, optional): Url/code choice. Defaults to 0. 0 : Direct link (Mail & Messenger) 1 : Direct link (Forum, Blog, Site) 2 : HTML Code Thumbnail 3 : HTML Code Big 4 : Forum BBCode Thumbnail 5 : Forum BBCode Big 6 : Source Link Thumbnail 7 : Source Link Big Returns: str: image share url/code """ self._upload_image() return self._get_share(index)
[docs] def get_all(self): """Get list of all links/code. * Direct link (Mail & Messenger) * Direct link (Forum, Blog, Site) * HTML Code Thumbnail * HTML Code Big * Forum BBCode Thumbnail * Forum BBCode Big * Source Link Thumbnail * Source Link Big Returns: list -- all image share codes/links """ self._upload_image() return self._get_share()