猫史档案馆


【Python作品分享】智能助手【作品秀】

用户:小多6tl4小多6tl4查看:0 回复:1 评论:0 创建时间:2022-08-08T07:52:28


【作品展示】

center_image

 

【作品介绍】

开始输入1

会蹦出一个对话框

name里面输入YYDS

passwords 输入yyds

百度搜素,音乐下载,删除音乐文件,天气查询,智慧识别和退出

 

【作品源代码】

# 这里必须用sys新建模块路径,不然下面的模块会导入不了
# import sys
# sys.path.append(r'C:\Users\zhubiping\appdata\roaming\tc\python-3.6.4\lib\site-packages')
'''
提示:
    1.开头的登录直接在用户名那里输入‘1’就可以进去了
    2.有一个叫‘Nominatim’的模块方法可能会没有,需要导入(其他模块也是一样)
'''
import random
import re
import os
import time
import easygui as e
import tkinter as tk
from tkinter import messagebox, filedialog
from geopy.geocoders import Nominatim
import string
import socket
# 用于获取网页内容的模块和解析网页源代码的模块
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlencode
import urllib.parse

names = ['YYDS']
passwords = ['yyds']
title = '您的智能助手'

#Errors
cityNotFoundError = "错误:此城市不属于中国之内。\n或者系统找不到此地址,可另换输入内容或点击‘当前地址’获取"

root = tk.Tk()
root.withdraw()

#===============================工具方法===================================#


def is_all_chinese(strs):  # 判断是否是纯中文
    for i in strs:
        if not '\u4e00' <= i <= '\u9fa5':
            return False
    return True


def is_all_eng(strs):  # 判断是否是纯英文
    for i in strs:
        if i not in string.ascii_lowercase+string.ascii_uppercase:
            return False
    return True
#===============================工具方法===================================#


class Getoutofloop(Exception):
    pass


def get_host_ip():
    """
    查询本机ip地址
    :return:
    """
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()

    return ip


def SignIn():
    isRun = True
    content = e.multpasswordbox("请先输入用户名或密码:", title, ("用户名:", "密码:"), ())
    while isRun:
        if content == None:
            exit(0)
        elif content[0] == "1":
            isRun = False
            break
        if content[0] in names:
            for i in range(len(names)):
                if names[i] == content[0] and passwords[i] == content[1]:
                    e.msgbox("-登录成功-")
                    isRun = False
                    break
            else:
                content = e.multpasswordbox(
                    "(密码错误!)\n请先输入用户名或密码:", title, ("用户名:", "密码:"), ())
                continue
            break
        else:
            e.msgbox("-该用户不存在-")
            content = e.multpasswordbox(
                "请先输入用户名或密码:", title, ("用户名:", "密码:"), ())


def delete_Musics():
    paths = filedialog.askopenfilenames(title="choose a Music",
                                        initialdir="C:/",
                                        filetypes=[("MP3", "mp3")])
    for path in paths:
        os.remove(path)



def getWeatherData(cityName):
    ur喵weather_mini?city=' + cityName
    response = requests.get(url)
    weatherDict = response.json()
    print(weatherDict)
    if weatherDict['desc'] == 'OK':
        # 获取城市名
        global city, wendu, month, forecast
        city = weatherDict['data']['city']
        # 获取当前温度
        wendu = weatherDict['data']['wendu'] + '℃ '
        month = time.strftime('%m')
        forecast = weatherDict['data']['forecast']
        # 获取天气类型
        type = forecast[0]['type']
        # 获取最高温度
        high = forecast[0]['high']
        # 获取最低温度
        low = forecast[0]['low']
        tip = weatherDict['data']['ganmao']
        content = '城市:'+city+'\n当前温度:'+wendu+'\n天气:' + \
            type+'\n最高温度:'+high+'\n最低温度:'+low+'\n注意:'+tip
    else:
        content = '-您的网络不佳-'
    return content


def WeatherGet():
    cityNames = ['北京', '上海', '广州', '深圳', '哈尔滨', '辽宁', '新疆', '海南', '重庆',
                 '武汉', '浙江', '杭州', '云南', '桂林', '南宁']
    mode = e.buttonbox("请选择城市:", title, ['当前地址', '选择地址', '输入地址', '返回'])
    if mode == "选择地址":
        city = e.choicebox("请选择城市:", title, cityNames)
    elif mode == "输入地址":
        cityPos = e.enterbox("请输入城市:", title)
        if '路' or '街' or '区' or '镇' in cityPos:
            try:
                geolocator = Nominatim(user_agent="aaa515")
                location = geolocator.geocode(cityPos)
                pos = location.address
                country = pos.split(', ')[::-1][0]
                city = pos.split(', ')[::-1][3]
                if country != '中国':
                    e.msgbox(cityNotFoundError, title)
                    return
            except:
                e.exceptionbox("系统没有找到您的位置,以下是系统报错信息,快上报给作者吧!",
                               "Error404 系统出错啦!")
                return
        else:
            city = cityPos
    elif mode == "返回":
        return
    else:
        messagebox.showinfo("提示", "‘当前地址’功能尚未完善,快去试试其他功能吧")
        return
#         cityIP = get_host_ip()
#         print(cityIP)
#         city = cityIP
    e.textbox("结果如下:", title, getWeatherData(city))
    start_Ask()


def Get_BaiduSearch():
    okBths = ['好的', '嗯']
    image = r"C:\Users\zhubiping\Desktop\MIKE_FILES\images\ordinary普通图片\wotomalen.gif"
    content = e.enterbox("输入关键名词(直接回车可以退出):", title)
    if content == None or content == "":
        return
    try:
        # 分解问题(转换格式)
        q = urllib.parse.quote(content)
        # URL百度搜索地址
        url = 'https://baike.喵/item/' + q
        # 获取百度网页内容
        html = urllib.request.urlopen(url)
        # 读取百度网页内容
        content = html.read().decode('utf-8')
        html.close()
        # 解析代码
        soup = BeautifulSoup(content, "lxml")
        # 抽取内容
        text = soup.find('div', class_="lemma-summary").children
        result = ''
        # 获取内容
        for x in text:
            word = re.sub(re.compile(r"<(.+?)>"), '', str(x))
            result += str(re.sub(re.compile(r"\[(.+?)\]"), '', word))
            # 显示
        e.textbox('结果如下:', title, result)
    except:
        e.msgbox("我的脑子有点乱>﹏<。", title, okBths[0])
    start_Ask()


def IntelligentTools():
    toolsList = ['返回', '文字识别', '车型识别', '图片特效', '图片上色', "人物动漫化"]
    modeTop = e.choicebox(
        '请选择您需要打开的智能工具(此功能需要百度AI还有其他文件,如有需要请告知作者)', title, choices=toolsList)
    if modeTop == toolsList[0]:
        return
    elif modeTop == toolsList[1]:
        #os.system("python index.py")
        messagebox.showinfo("提示", "‘文字识别’功能尚未完善,快去试试其他功能吧")
    elif modeTop == toolsList[2]:
        messagebox.showinfo("提示", "‘车型识别’功能尚未完善,快去试试其他功能吧")
        #os.system("python VehicleIdentification.py")
    elif modeTop == toolsList[3]:
        messagebox.showinfo("提示", "‘图片特效’功能尚未完善,快去试试其他功能吧")
        #os.system("python PictureEffects.py")
    elif modeTop == toolsList[4]:
        messagebox.showinfo("提示", "‘图片上色’功能尚未完善,快去试试其他功能吧")
        #os.system("python PictureColoring.py")
    elif modeTop == toolsList[5]:
        messagebox.showinfo("提示", "‘人物动漫化’功能尚未完善,快去试试其他功能吧")
        #os.system("python -.py")


def Musics_DownLoad():
    header = {  # 伪造浏览器头部,不然获取不到网易云音乐的页面源代码。
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW喵) AppleWebKit/537.36 (KH喵L, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
    }
    topList = ['飙升榜', '新歌榜', '原创榜', '热歌榜', '返回']
    songTop = e.choicebox('选择下载的歌榜', 'Music Download', choices=topList)
    # 这是网易云音乐热歌榜的链接(其实是嵌套在网页里面含有歌曲数据的页面框架的真实链接)
    link1 = "https:/喵discover/toplist?id=3778678"
    link2 = "https:/喵discover/toplist?id=19723756"
    link3 = "https:/喵discover/toplist?id=2884035"
    link4 = "https:/喵discover/toplist?id=3779629"
    if songTop == "" or songTop == None:
        songTop = e.choicebox('选择下载的歌榜', 'Music Download', choices=topList)
    elif songTop == topList[0]:
        link = link1
    elif songTop == topList[1]:
        link = link2
    elif songTop == topList[2]:
        link = link3
    elif songTop == topList[3]:
        link = link4
    else:
        return
    # 通过 requests 模块的 get 方法获取网页数据
    r = requests.get(link, headers=header)
    # 获取网页内容
    html = r.content
    # 通过 BeautifulSoup 模块解析网页,具体请参考官方文档。
    soup = BeautifulSoup(html, "html.parser")
    # 通过分析网页源代码发现排行榜中的歌曲信息全部放在类名称为 f-hide 的 ul 中,
    # 于是根据特殊的类名称查找相应 ul,然后找到里面的全部 a 标签,
    # 限制数量为200,即排行榜的前 200 首歌。
    songs = soup.find("ul", class_="f-hide").select("a", limit=200)
    root = tk.Tk()
    root.withdraw()

    namelist = []
    linklist = []
    for s in songs:    # 遍历输出数组 songs 中的内容
        # 只截取歌曲链接中的 ID 部分,因为网页中链接的形式为“/song?id=496870798”,从 = 号之后的就是歌曲的 ID 号。
        song_id = s['href'][9:]
        name = s.text   # 获取 a 标签的文本内容,即歌曲的名称。
        namelist.append(name)
        song_down_link = "http:/喵song/media/outer/url?id=" + song_id + ".mp3"
        linklist.append(song_down_link)
    print(namelist)

    song_name = e.choicebox('选择下载的歌曲', 'Music Download', choices=namelist)

    for i in range(len(namelist)):
        if namelist[i] == song_name:
            song_down_link = linklist[i]
            break

    response = requests.get(song_down_link, headers=header).content
    path = filedialog.askdirectory()
    # print(song_name)
    with open(path + "/" + song_name + ".mp3", 'ab+') as f:
        f.write(response)

    messagebox.showinfo("提示", "下载完成")
    start_Ask()


def start_Ask():
    global action
    list = ['EXIT', '百度搜索', '音乐下载', "删除音乐文件", "天气查询", "智慧识别"]
    action = e.buttonbox("请选择您现在要做的操作:", "智能助手", list)
    while action != list[0]:
        if action == list[0]:
            break
        elif action == list[1]:
            Get_BaiduSearch()
            action = e.buttonbox("请选择您现在要做的操作:", "智能助手", list)
        elif action == list[2]:
            Musics_DownLoad()
            action = e.buttonbox("请选择您现在要做的操作:", "智能助手", list)
        elif action == list[3]:
            delete_Musics()
            action = e.buttonbox("请选择您现在要做的操作:", "智能助手", list)
        elif action == list[4]:
            WeatherGet()
            action = e.buttonbox("请选择您现在要做的操作:", "智能助手", list)
        elif action == list[5]:
            IntelligentTools()
            action = e.buttonbox("请选择您现在要做的操作:", "智能助手", list)
    exit()


SignIn()
start_Ask()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
小多6tl4小多6tl4

本作品制作不易,请点赞+关注

点赞0


评论