使用Shell脚本从***抓取随机壁纸

需积分: 13 1 下载量 32 浏览量 更新于2024-11-07 收藏 1KB ZIP 举报
资源摘要信息:"random_wallpaper:从 *** 获取随机壁纸" 知识点: 1. Shell脚本基础: Shell脚本是一种用于自动化执行命令的程序,它们对于Linux和Unix系统管理员来说非常有用。Shell脚本通常包含一系列的命令,当执行时,这些命令会在Shell中顺序运行。在本例中,"random_wallpaper" 是一个Shell脚本,旨在从***网站获取随机壁纸。 2. URL和网页请求: 为了从***获取壁纸,脚本需要能够发送HTTP请求到该网站。这通常是通过命令行工具如curl或者wget完成的,它们能够从指定的URL下载内容。curl是一个常用的命令行工具,可以用来发送各种网络请求,包括GET和POST请求,而且它支持多种协议,包括HTTP, HTTPS, FTP等。 3. JSON数据处理: ***网站可能返回JSON格式的数据。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Shell脚本中处理JSON数据可能需要借助额外的命令行工具,如jq。jq是一个处理JSON数据的命令行工具,可以过滤、映射、和转换结构化数据。 4. 下载图片: 一旦脚本获取了壁纸的链接,它将使用命令行工具下载图片。下载过程通常涉及到将网络数据流保存到本地文件中。这可以通过curl或wget等工具实现,这些工具允许你指定下载文件的存储位置。 5. 随机数生成: 为了随机选择壁纸,脚本可能需要生成或选择一个随机数。在Shell脚本中,可以使用内置的$RANDOM变量来生成一个随机数,或者使用命令行工具如shuf。 6. 条件和循环: 脚本可能需要使用条件语句来判断某些条件是否满足,例如检查下载是否成功,以及循环语句来实现重复的任务,如在多个分辨率下获取壁纸。 7. Linux系统中的文件操作: 在执行下载等任务时,脚本可能需要创建和修改文件,包括检查文件是否存在,创建目录等。这涉及到文件系统的操作,例如使用touch, mkdir, rm等命令。 8. 脚本的执行和权限: 在Linux系统中运行Shell脚本需要相应的权限。通常,脚本文件需要有执行权限,可以通过chmod命令赋予。脚本可以被直接调用执行,也可以被其他脚本或程序作为子程序调用。 9. 错误处理: 在编写脚本的过程中,需要考虑到错误处理。脚本应该能够处理各种潜在的错误情况,如网络请求失败、文件下载错误等,并且提供相应的错误信息或执行备选的操作。 10. 用户交互: 如果脚本设计为与用户交互,可能需要使用read命令来获取用户的输入,或者使用dialog等工具来创建图形用户界面,以提升用户体验。 通过这些知识点的综合应用,可以编写一个Shell脚本,实现从***获取随机壁纸,并下载到本地计算机上。此过程涵盖了网络请求、数据解析、文件操作以及基本的编程逻辑等多方面的技能。

import os from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QIcon from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QHBoxLayout, QTreeView, QFileSystemModel class ImageViewer(QWidget): def init(self, folder_path): super().init() self.folder_path = folder_path self.image_dict = {} self.current_image = None self.setWindowTitle("Image Viewer") self.setFixedSize(1000, 600) self.image_label = QLabel(self) self.image_label.setAlignment(Qt.AlignCenter) self.tree_view = QTreeView() self.tree_view.setMinimumWidth(250) self.tree_view.setMaximumWidth(250) self.model = QFileSystemModel() self.model.setRootPath(folder_path) self.tree_view.setModel(self.model) self.tree_view.setRootIndex(self.model.index(folder_path)) self.tree_view.setHeaderHidden(True) self.tree_view.setColumnHidden(1, True) self.tree_view.setColumnHidden(2, True) self.tree_view.setColumnHidden(3, True) self.tree_view.doubleClicked.connect(self.tree_item_double_clicked) self.main_layout = QHBoxLayout(self) self.main_layout.addWidget(self.tree_view) self.main_layout.addWidget(self.image_label) self.load_images() self.update_image() def load_images(self): for file_name in os.listdir(self.folder_path): if file_name.lower().endswith((".jpg", ".jpeg", ".png", ".gif", ".bmp")): file_path = os.path.join(self.folder_path, file_name) self.image_dict[file_name] = file_path current_image = list(self.image_dict.keys())[0] def update_image(self): if self.current_image is not None: pixmap = QPixmap(self.image_dict[self.current_image]) self.image_label.setPixmap(pixmap.scaled(self.width() - self.tree_view.width(), self.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) def tree_item_double_clicked(self, index): file_name = self.model.fileName(index) if file_name in self.image_dict: self.current_image = file_name self.update_image() def keyPressEvent(self, event): if event.key() == Qt.Key_A: self.previous_image() elif event.key() == Qt.Key_D: self.next_image() elif event.key() in [Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.Key_4, Qt.Key_5]: self.save_text_file(event.key() - Qt.Key_0) def previous_image(self): if self.current_image is not None: file_names = list(self.image_dict.keys()) current_index = file_names.index(self.current_image) if current_index > 0: self.current_image = file_names[current_index - 1] else: self.current_image = file_names[-1] self.update_image() def next_image(self): if self.current_image is not None: file_names = list(self.image_dict.keys()) current_index = file_names.index(self.current_image) if current_index < len(file_names) - 1: self.current_image = file_names[current_index + 1] else: self.current_image = file_names[0] self.update_image() def save_text_file(self, number): if self.current_image is not None: file_name = self.current_image txt_file_path = os.path.join(self.folder_path, os.path.splitext(file_name)[0] + ".txt") with open(txt_file_path, "w") as file: file.write(str(number)) if name == "main": import sys app = QApplication(sys.argv) viewer = ImageViewer("D:/图片/wallpaper") viewer.show() sys.exit(app.exec_())这份代码实现不了使用键盘的A键向上翻页以及D键向下翻页,也实现不了键盘数字键生成相应txt文档,帮我分析一下错在哪里

2023-06-07 上传