Diario de Python | #8。 ISSUU PDF下载器
#spanish #python #开发日志

我一直在寻找继续改善选择颜色的想法,直到我发现重播还活着。对于那些不知道的人,它是一本复古的视频游戏杂志,具有非常有趣的质量内容,可以在一个名为Issuu的阅读平台上获得。

我想要他们!

作为本文的出版,他们有大约35或40个已发布的编号。我决定将它们下载到我的iPad上,但假设(除非出版商本身允许)无法从ISSUU下载。

问题

我只需要复制每个杂志的每个URL ,这是一个由40个迭代组成的重复过程。所有这些,用于重播杂志。

想象我是否一直在搜索下载100没有其他公开。

然后我记得我是开发人员,我的道德义务是使事情自动化。

是时候复制诚实的人了

我不想在零开发的解决方案中工作汗水和磨牙,所以我决定从人民那里复制我。

我想在Python中这样做以继续增强自己的技能,因此寻找可以满足我期望的存储库。我发现了这个:

GitHub logo jpyamamoto / Issuu-PDF-Downloader

Python上的程序,该程序以PDF下载为jisuu文件

Issuu-PDF-Downloader

IMPORTANT: dependency package pyfpdf has obsolete version from pip or conda. Please install from its project GitHub page.

Python上的程序,该程序以pdf

下载issuu文件

issuu是一个平台,允许用户上传pdf并保护他们免于下载(他们不算我)

但是,在对源代码进行研究时,我能够找到它的弱点。它将PDF的每个页面存储在某个位置中,并将其标记为Page_1 < - 页数。

因此,使用Python中的这个小代码,您可以利用此弱点并下载您想要的任何文件。

您必须运行文件框架。py并粘贴要下载的文件的URL,就是这样。

它将为您提供图像以及PDF。

您可以更改resize.py文件中的图像大小。

,但是像任何开发问题一样,从来没有医疗解决方案。有时似乎有人已经考虑过您的不便了,但也许他们在您认为的更个性化(雄心勃勃的)领域。

是时候为社会做出贡献

首先,我做了一个存储库,因为我知道我可以改善许多事情:

GitHub logo maxwellnewage / Issuu-PDF-Downloader

Python上的程序,该程序以PDF下载为jisuu文件

Issuu-PDF-Downloader

Este fork arregla los problemas de dependencias y la generación de PDFs.

También se reemplaza el input() por una lista de links de Issuu para automatizar el proceso.

Cómo funciona

El script dict_to_json_replay.pyjson folder14中生成issuu_urls.jon文件,并具有以下方案:

 [
			{
			“ name”   pdf  
			“ url”   issuu url  
			}
			] 

您可以使用它来降低重播杂志,或重写自己的JSON,其中包含要转换的杂志的链接。

要运行它,必须执行Abiaoqian脚本15。该过程如下:

  • 加载并将json issuu_urls.json文件转换为python词典。
  • 对于每个URL,将所有Páginas作为图像排放。将每个图像保存在images中。
  • 将PDF中的所有图像与FPDF Liber一起,然后在pdfs Folder17中生成一个文件。
  • unaâ

然后我评估了相同的内容:

  • 可以下载杂志,但自由被打破了。
  • 您也不会有要求。
  • 通过控制台以及网络上的URL,但是这次您必须执行每个链接的程序,灾难。
  • 命名法不是很标准,并且有许多具有罕见名称的变量。

事实是不同的:该程序没有通过依赖关系进行编译。我制作了一对托架,我分发了它们,但是库的所有参数都不同或具有新的参数。我到处都在破裂。我已经把他扭转了几天,但是我可以做到。

我驯服了野兽

首先,我想要一些自动化的东西,以便将URL列表,而不是由控制台输入。但是,为了使其非常动态,我决定构建一个可以填充这些链接的JSON,然后成为Python中的字典列表:

def get_issuu_json_as_dict():
    issuu_url_json = os.path.join('./json/', 'issuu_urls.json')
    issuu_url_file = open(issuu_url_json, "r").read()
    return json.loads(issuu_url_file)

然后,想要使用我的应用程序的人可以简单地在JSON文件夹中创建Issuu_urls.jon,然后以这种格式将其杂志列表放置:

[
    {
        "name": "name of the pdf",
        "url": "issuu url"
    }
]

另一方面,旧算法所做的第一件事是降低所有图像,然后将它们变成PDF(例如上面找到更多的网站)。问题是图像存储在项目的射线中,从未消除。

我在downloader.py中解决了它:

def downloader(url):
    print('Started download process...')
    # List to create the PDF
    files = []
    formatter = url.replace('page_1.jpg', '')
    page_counter = 1
    while True:
        url_page = formatter + 'page_' + str(page_counter) + '.jpg'
        filename = str(page_counter) + '.jpg'
        if exists(url_page):
            # Save image directory
            filename_with_folder = os.path.join(IMAGE_DIR, filename)
            # Download images
            opener = open(filename_with_folder, 'wb')
            opener.write(urllib.request.urlopen(url_page).read())
            # Save images
            opener.close()
            print(f'Correctly saved file {filename} From URI: {url_page}')
            # Add filename to list, so we make the pdf later
            files.append(filename_with_folder)
            # Go for the next one
            page_counter += 1
        else:
            # No more images
            break

    print('Completed download process...')
    # Time to create the pdf
    return files

常数 image_dir 包含值。保存每个图像并将其变成pdf之后,有一个mãal

def delete_old_images():
    for image in os.listdir(IMAGE_DIR):
        if image.endswith(".jpg"):
            os.remove(os.path.join(IMAGE_DIR, image))

我必须这样做,因为如果我试图清洁每个PDF创建的PDF,我会抛出一个例外,表明我想删除的文件正在使用。非常罕见。

顺便说一句,

创建PDFS使用了一个名为PyFPDF的库,它允许您从零创建它们;甚至阅读文档并从中提取信息。

细节,不喜欢的人

我的叉子功能完全正常。我给了他很多爱,甚至留下了文档,所以您可以克隆它,然后在美丽的Ide Pycharm中尝试而无需戏剧。

但是,我发现了一些可能使他们的执行失败的细节:首先,如果您尝试降低40 pdf(它可以生成我的JSON运行dict_to_to_to_json_replay.py),在15或20号的中间,您会给您一个错误的请求错误。这是因为Issuu对他的服务器如此多的图像不满意,并认为他正在尝试做ataque DDoS。为了避免这种情况,我建议将您的JSON留在每个执行的10个链接中。

另一方面,这无法解决“高级杂志”的封锁:如果发布者认为一半的页面不可用,则您将在文档的那部分中下载非常未关注的图像。认为这不是黑客,而是一个爬网的网站,寻找每个página并将其重新组合在PDF中。

结论

我对结果感到满意。我实现了以完全合法的方式自动化杂志大量下载杂志的目标。我鼓励他们,简单的凡人,向我的存储库分叉,并尝试改进该项目。我敢肯定,他们可以做到更多。