PK!3Vodocsend/__init__.pyfrom .docsend import DocSend PK!MS>>docsend/cli.pyimport click from docsend import DocSend @click.command() @click.argument('doc_id') @click.option('-e', '--email', default=None, help='Email to authorize with') @click.option('-f', '--format', type=click.Choice(['pdf', 'png']), default='pdf', help='Save as PDF (default) or image sequence') @click.option('-o', '--output', default=None, help='Output file name') def main(doc_id, email, format, output): ds = DocSend(doc_id) ds.fetch_meta() if email: ds.authorize(email) ds.fetch_image_meta() ds.fetch_images() if output is None: output = f'docsend_{doc_id}.pdf' if format == 'pdf' else f'docsend_{doc_id}' if format == 'pdf': ds.save_pdf(output) elif format == 'png': ds.save_images(output) print(f'saved to {output}') if __name__ == '__main__': main() PK!docsend/docsend.pyfrom io import BytesIO from pathlib import Path from PIL import Image from requests_html import HTMLSession class DocSend: def __init__(self, doc_id): self.doc_id = doc_id self.url = f'https://docsend.com/view/{doc_id}' self.s = HTMLSession() def fetch_meta(self): r = self.s.get(self.url) r.raise_for_status() self.auth_token = r.html.find('input[@name="authenticity_token"]')[0].attrs['value'] self.pages = int(r.html.find('.document-thumb-container')[-1].attrs['data-page-num']) def authorize(self, email): form = { 'utf8': '✓', '_method': 'patch', 'authenticity_token': self.auth_token, 'link_auth_form[email]': email, 'commit': 'Continue', } f = self.s.post(self.url, data=form) f.raise_for_status() def fetch_image_meta(self): self.image_urls = [] for page in range(1, self.pages + 1): img = self.s.get(f'{self.url}/page_data/{page}') img.raise_for_status() self.image_urls.append(img.json()['imageUrl']) def fetch_images(self): self.images = [] for url in self.image_urls: r = self.s.get(url) r.raise_for_status() self.images.append(Image.open(BytesIO(r.content))) def save_pdf(self, name=None): self.images[0].save( name, format='PDF', append_images=self.images[1:], save_all=True ) def save_images(self, name): path = Path(name) path.mkdir(exist_ok=True) for page, image in enumerate(self.images, start=1): image.save(path / f'{page}.png', format='PNG') PK!HFR(,(docsend-0.1.1.dist-info/entry_points.txtN+I/N.,()JO.NKz9Vy\\PK!HlUTdocsend-0.1.1.dist-info/WHEEL HM K-*ϳR03rOK-J,/R(O-)T0343 /, (-JLR()*M IL*4KM̫PK!Hؠ] docsend-0.1.1.dist-info/METADATAN0EYX)QZQ6(IEv"ذ{5@ZY J8#R3%qZ5( ׽Khڡn@[0÷UVKL A񱾫5 L{ն]7-Bz%ssP'!oo aJ ͵Cj1I\׍^_}+TjdjHOȵ7PK!3Vodocsend/__init__.pyPK!MS>>Ndocsend/cli.pyPK!docsend/docsend.pyPK!HFR(,( docsend-0.1.1.dist-info/entry_points.txtPK!HlUT1 docsend-0.1.1.dist-info/WHEELPK!Hؠ]  docsend-0.1.1.dist-info/METADATAPK!H QU docsend-0.1.1.dist-info/RECORDPK