17 Commits

Author SHA1 Message Date
Yoshiko
a33b882592 Update update_check.json 2019-07-14 09:59:56 +08:00
Yoshiko
150b81453c Update 11.6 2019-07-14 09:58:46 +08:00
Yoshiko
a6df479b78 Update 11.6 2019-07-14 09:45:53 +08:00
Yoshiko
dd6445b2ba Update 11.6 2019-07-14 09:38:26 +08:00
Yoshiko
41051a915b Update README.md 2019-07-12 18:13:09 +08:00
Yoshiko
32ce390939 Update README.md 2019-07-12 18:08:45 +08:00
Yoshiko
8deec6a6c0 Update README.md 2019-07-12 18:08:20 +08:00
Yoshiko
0fab70ff3d Update README.md 2019-07-12 18:07:23 +08:00
Yoshiko
53bbb99a64 Update README.md 2019-07-12 17:59:46 +08:00
Yoshiko
0e712de805 Update README.md 2019-07-11 10:43:55 +08:00
Yoshiko
6f74254e96 Update README.md 2019-07-11 00:58:16 +08:00
Yoshiko
4220bd708b Update README.md 2019-07-11 00:49:23 +08:00
Yoshiko
3802d88972 Update README.md 2019-07-11 00:46:22 +08:00
Yoshiko
8cddbf1e1b Update README.md 2019-07-11 00:41:40 +08:00
Yoshiko
332326e5f6 Update README.md 2019-07-09 18:52:36 +08:00
Yoshiko
27f64a81d0 Update README.md 2019-07-09 17:57:09 +08:00
Yoshiko
7e3fa5ade8 Update README.md 2019-07-09 17:56:48 +08:00
5 changed files with 274 additions and 129 deletions

View File

@@ -1,15 +1,16 @@
import requests import requests
from configparser import RawConfigParser from configparser import ConfigParser
import os import os
import re import re
from retrying import retry
import time import time
import sys import sys
config = RawConfigParser() config_file='config.ini'
if os.path.exists('config.ini'): config = ConfigParser()
if os.path.exists(config_file):
try: try:
config.read('config.ini', encoding='UTF-8') config.read(config_file, encoding='UTF-8')
except: except:
print('[-]Config.ini read failed! Please use the offical file!') print('[-]Config.ini read failed! Please use the offical file!')
else: else:
@@ -26,33 +27,54 @@ else:
print("", file=code) print("", file=code)
print("[update]",file=code) print("[update]",file=code)
print("update_check=1",file=code) print("update_check=1",file=code)
print("", file=code)
print("[media]", file=code)
print("media_warehouse=emby", file=code)
print("#emby or plex", file=code)
print("#plex only test!", file=code)
print("", file=code)
print("[directory_capture]", file=code)
print("switch=0", file=code)
print("directory=", file=code)
print("", file=code)
print("everyone switch:1=on, 0=off", file=code)
time.sleep(2) time.sleep(2)
print('[+]config.ini: created!') print('[+]config.ini: created!')
try: try:
config.read('config.ini', encoding='UTF-8') config.read(config_file, encoding='UTF-8')
except: except:
print('[-]Config.ini read failed! Please use the offical file!') print('[-]Config.ini read failed! Please use the offical file!')
def ReadMediaWarehouse():
return config['media']['media_warehouse']
def UpdateCheckSwitch(): def UpdateCheckSwitch():
check=str(config['update']['update_check']) check=str(config['update']['update_check'])
if check == '1': if check == '1':
return '1' return '1'
elif check == '0': elif check == '0':
return '0' return '0'
elif check == '':
return '0'
def get_html(url,cookies = None):#网页请求核心 def get_html(url,cookies = None):#网页请求核心
i = 0 try:
proxy = config['proxy']['proxy']
timeout = int(config['proxy']['timeout'])
retry_count = int(config['proxy']['retry']) retry_count = int(config['proxy']['retry'])
except:
print('[-]Proxy config error! Please check the config.')
i = 0
while i < retry_count: while i < retry_count:
try: try:
if not str(config['proxy']['proxy']) == '': if not str(config['proxy']['proxy']) == '':
proxies = {"http": "http://" + str(config['proxy']['proxy']),"https": "https://" + str(config['proxy']['proxy'])} proxies = {"http": "http://" + proxy,"https": "https://" + proxy}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36'} headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36'}
getweb = requests.get(str(url), headers=headers, timeout=int(config['proxy']['timeout']),proxies=proxies, cookies=cookies) getweb = requests.get(str(url), headers=headers, timeout=timeout,proxies=proxies, cookies=cookies)
getweb.encoding = 'utf-8' getweb.encoding = 'utf-8'
return getweb.text return getweb.text
else: else:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'} headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
getweb = requests.get(str(url), headers=headers, timeout=int(config['proxy']['timeout']), cookies=cookies) getweb = requests.get(str(url), headers=headers, timeout=timeout, cookies=cookies)
getweb.encoding = 'utf-8' getweb.encoding = 'utf-8'
return getweb.text return getweb.text
except requests.exceptions.RequestException: except requests.exceptions.RequestException:
@@ -67,5 +89,6 @@ def get_html(url,cookies = None):#网页请求核心
except requests.exceptions.ConnectTimeout: except requests.exceptions.ConnectTimeout:
i += 1 i += 1
print('[-]Connect retry '+str(i)+'/'+str(retry_count)) print('[-]Connect retry '+str(i)+'/'+str(retry_count))
print('[-]Connect Failed! Please check your Proxy or Network!')

View File

@@ -3,16 +3,20 @@ import os
import time import time
import re import re
import sys import sys
import ADC_function from ADC_function import *
import json import json
import shutil import shutil
from configparser import ConfigParser
version='0.11.5' version='0.11.6'
os.chdir(os.getcwd()) os.chdir(os.getcwd())
config = ConfigParser()
config.read(config_file, encoding='UTF-8')
def UpdateCheck(): def UpdateCheck():
if ADC_function.UpdateCheckSwitch() == '1': if UpdateCheckSwitch() == '1':
html2 = ADC_function.get_html('https://raw.githubusercontent.com/wenead99/AV_Data_Capture/master/update_check.json') html2 = get_html('https://raw.githubusercontent.com/wenead99/AV_Data_Capture/master/update_check.json')
html = json.loads(str(html2)) html = json.loads(str(html2))
if not version == html['version']: if not version == html['version']:
@@ -23,24 +27,28 @@ def UpdateCheck():
else: else:
print('[+]Update Check disabled!') print('[+]Update Check disabled!')
def movie_lists(): def movie_lists():
#MP4 if config['directory_capture']['switch'] == '0' or config['directory_capture']['switch'] == '':
a2 = glob.glob(r".\*.mp4") a2 = glob.glob(r".\*.mp4")
# AVI
b2 = glob.glob(r".\*.avi") b2 = glob.glob(r".\*.avi")
# RMVB
c2 = glob.glob(r".\*.rmvb") c2 = glob.glob(r".\*.rmvb")
# WMV
d2 = glob.glob(r".\*.wmv") d2 = glob.glob(r".\*.wmv")
# MOV
e2 = glob.glob(r".\*.mov") e2 = glob.glob(r".\*.mov")
# MKV
f2 = glob.glob(r".\*.mkv") f2 = glob.glob(r".\*.mkv")
# FLV
g2 = glob.glob(r".\*.flv") g2 = glob.glob(r".\*.flv")
# TS
h2 = glob.glob(r".\*.ts") h2 = glob.glob(r".\*.ts")
total = a2 + b2 + c2 + d2 + e2 + f2 + g2 + h2
total = a2+b2+c2+d2+e2+f2+g2+h2 return total
elif config['directory_capture']['switch'] == '1':
directory = config['directory_capture']['directory']
a2 = glob.glob(r".\\" + directory + "\*.mp4")
b2 = glob.glob(r".\\" + directory + "\*.avi")
c2 = glob.glob(r".\\" + directory + "\*.rmvb")
d2 = glob.glob(r".\\" + directory + "\*.wmv")
e2 = glob.glob(r".\\" + directory + "\*.mov")
f2 = glob.glob(r".\\" + directory + "\*.mkv")
g2 = glob.glob(r".\\" + directory + "\*.flv")
h2 = glob.glob(r".\\" + directory + "\*.ts")
total = a2 + b2 + c2 + d2 + e2 + f2 + g2 + h2
return total return total
def CreatFailedFolder(): def CreatFailedFolder():
if not os.path.exists('failed/'): # 新建failed文件夹 if not os.path.exists('failed/'): # 新建failed文件夹
@@ -50,7 +58,6 @@ def CreatFailedFolder():
print("[-]failed!can not be make folder 'failed'\n[-](Please run as Administrator)") print("[-]failed!can not be make folder 'failed'\n[-](Please run as Administrator)")
os._exit(0) os._exit(0)
def lists_from_test(custom_nuber): #电影列表 def lists_from_test(custom_nuber): #电影列表
a=[] a=[]
a.append(custom_nuber) a.append(custom_nuber)
return a return a

View File

@@ -1,16 +1,14 @@
# AV Data Capture 日本电影元数据抓取工具(刮削器) # AV Data Capture
<a title="Hits" target="_blank" href="https://github.com/b3log/hits"><img src="https://hits.b3log.org/b3log/hits.svg"></a> <a title="Hits" target="_blank" href="https://github.com/yoshiko2/AV_Data_Capture"><img src="https://hits.b3log.org/yoshiko2/AV_Data_Capture.svg"></a>
![](https://img.shields.io/badge/build-passing-brightgreen.svg?style=flat-square) ![](https://img.shields.io/badge/build-passing-brightgreen.svg?style=flat-square)
![](https://img.shields.io/github/downloads/yoshiko2/av_data_capture/total.svg?style=flat-square)<br> ![](https://img.shields.io/github/downloads/yoshiko2/av_data_capture/total.svg?style=flat-square)<br>
![](https://img.shields.io/github/languages/code-size/yoshiko2/av_data_capture.svg?style=flat-square)
![](https://img.shields.io/github/issues/yoshiko2/av_data_capture.svg?style=flat-square)
![](https://img.shields.io/github/license/yoshiko2/av_data_capture.svg?style=flat-square) ![](https://img.shields.io/github/license/yoshiko2/av_data_capture.svg?style=flat-square)
![](https://img.shields.io/github/release/yoshiko2/av_data_capture.svg?style=flat-square)<br> ![](https://img.shields.io/github/release/yoshiko2/av_data_capture.svg?style=flat-square)<br>
![](https://img.shields.io/github/forks/yoshiko2/av_data_capture.svg?style=flat-square)
![](https://img.shields.io/github/stars/yoshiko2/av_data_capture.svg?style=flat-square)
![](https://img.shields.io/github/watchers/yoshiko2/av_data_capture.svg?style=flat-square) **日本电影元数据 抓取工具 | 刮削器**配合本地影片管理软件EMBY,KODI管理本地影片该软件起到分类与元数据抓取作用利用元数据信息来分类供本地影片分类整理使用。
# 目录 # 目录
* [免责声明](#免责声明) * [免责声明](#免责声明)
@@ -28,23 +26,22 @@
* [写在后面](#8写在后面) * [写在后面](#8写在后面)
# 免责声明 # 免责声明
1.本软件仅供**技术交流,学术交流**使用,本项目旨在学习Beautifulsoup, xpath, PyQuery<br> 1.本软件仅供**技术交流,学术交流**使用,本项目旨在学习 Python3<br>
2.本软件禁止用于任何非法用途<br> 2.本软件禁止用于任何非法用途<br>
3.使用者使用该软件产生的一切法律后果由使用者承担<br> 3.使用者使用该软件产生的一切法律后果由使用者承担<br>
4.不可使用于商业和个人其他意图<br> 4.不可使用于商业和个人其他意图<br>
# 注意 # 注意
**tg官方电报群:[ 点击进群](https://t.me/AV_Data_Capture_Official)**<br>
**推荐用法: 使用该软件后,对于不能正常获取元数据的电影可以用 Everaver 来补救**<br> **推荐用法: 使用该软件后,对于不能正常获取元数据的电影可以用 Everaver 来补救**<br>
暂不支持多P电影<br> 暂不支持多P电影<br>
# 你问我答 FAQ # 你问我答 FAQ
### F这软件是干什么用的 ### F这软件能下片吗
**Q**配合本地影片管理软件EMBY,KODI管理本地影片该软件起到分类与元数据抓取作用利用元数据信息来分类**注意:不提供任何影片下载地址** **Q**该软件不提供任何影片下载地址,仅供本地影片分类整理使用
### F什么是元数据 ### F什么是元数据
**Q**:元数据包括了影片的:封面,导演,演员,简介,类型...... **Q**:元数据包括了影片的:封面,导演,演员,简介,类型......
### F软件收费吗 ### F软件收费吗
**Q**:软件是开源的,永久免费,作者强烈谴责那些**利用本软件牟利**的人,并希望他们**死妈** **Q**:软件永久免费。除了 **作者** 钦点以外,给那些 **利用本软件牟利** 的人送上 **骨灰盒-全家族 | 崭新出厂**
### F软件运行异常怎么办 ### F软件运行异常怎么办
**Q**:认真看 [异常处理(重要)](#5异常处理重要) **Q**:认真看 [异常处理(重要)](#5异常处理重要)
@@ -55,7 +52,7 @@
# 如何使用 # 如何使用
### 下载 ### 下载
* release的程序可脱离**python环境**运行,可跳过 [模块安装](#1请安装模块在cmd终端逐条输入以下命令安装)<br>Release 下载地址(**仅限Windows**):<br>[![](https://img.shields.io/badge/%E4%B8%8B%E8%BD%BD-windows-blue.svg?style=for-the-badge&logo=windows)](https://github.com/yoshiko2/AV_Data_Capture/releases/download/0.11.4/Beta11.4.zip)<br> * release的程序可脱离**python环境**运行,可跳过 [模块安装](#1请安装模块在cmd终端逐条输入以下命令安装)<br>Release 下载地址(**仅限Windows**):<br>[![](https://img.shields.io/badge/%E4%B8%8B%E8%BD%BD-windows-blue.svg?style=for-the-badge&logo=windows)](https://github.com/yoshiko2/AV_Data_Capture/releases/download/0.11.5/Beta11.5.zip)<br>
* Linux,MacOS请下载源码包运行 * Linux,MacOS请下载源码包运行
* Windows Python环境:[点击前往](https://www.python.org/downloads/windows/) 选中executable installer下载 * Windows Python环境:[点击前往](https://www.python.org/downloads/windows/) 选中executable installer下载
@@ -99,6 +96,17 @@ config.ini
> >
>[update]<br> >[update]<br>
>update_check=1<br> >update_check=1<br>
>
>[media]<br>
>media_warehouse=emby<br>
>#emby or plex<br>
>#plex only test!<br>
>
>[directory_capture]<br>
>switch=0<br>
>directory=<br>
>
>#everyone switch:1=on, 0=off<br>
### 1.网络设置 ### 1.网络设置
#### * 针对“某些地区”的代理设置 #### * 针对“某些地区”的代理设置
@@ -115,9 +123,26 @@ config.ini
#### 连接重试次数设置 #### 连接重试次数设置
>[proxy]<br> >[proxy]<br>
>retry=3<br> >retry=3<br>
3即为重试次数 3即为重试次数
#### 检查更新开关
>[update]<br>
>update_check=1<br>
0为关闭1为开启不建议关闭
##### 媒体库选择
>[media]<br>
>media_warehouse=emby<br>
>#emby or plex<br>
>#plex only test!<br>
建议选择emby, plex不完善
#### 抓取目录选择
>[directory_capture]<br>
>switch=0<br>
>directory=<br>
switch为1时directory才会被触发抓取程序目录下的directory目录下的电影如果为0则不触发抓取和程序同一目录下的影片directory不生效
### (可选)设置自定义目录和影片重命名规则 ### (可选)设置自定义目录和影片重命名规则
**已有默认配置**<br> **已有默认配置**<br>
##### 命名参数<br> ##### 命名参数<br>
@@ -146,10 +171,10 @@ config.ini
### 请确保软件是完整地确保ini文件内容是和下载提供ini文件内容的一致的 ### 请确保软件是完整地确保ini文件内容是和下载提供ini文件内容的一致的
### 关于软件打开就闪退 ### 关于软件打开就闪退
可以打开cmd命令提示符把 ```AV_Data_capture.py/.exe```拖进cmd窗口回车运行查看错误出现的错误信息**依据以下条目解决** 可以打开cmd命令提示符把 ```AV_Data_capture.py/.exe```拖进cmd窗口回车运行查看错误出现的错误信息**依据以下条目解决**
### 关于```Updata_check``` ### 关于 ```Updata_check``` 和 ```JSON``` 相关的错误
跳转 [网络设置](#1网络设置) 跳转 [网络设置](#1网络设置)
### 关于```FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'JAV_output''``` ### 关于```FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'JAV_output''```
在软件所在文件夹下新建 JAV_output 文件夹 在软件所在文件夹下新建 JAV_output 文件夹,可能是你没有把软件拉到和电影的同一目录
### 关于连接拒绝的错误 ### 关于连接拒绝的错误
请设置好[代理](#1针对某些地区的代理设置)<br> 请设置好[代理](#1针对某些地区的代理设置)<br>
### 关于Nonetype,xpath报错 ### 关于Nonetype,xpath报错
@@ -166,8 +191,8 @@ config.ini
COSQ-004.mp4 COSQ-004.mp4
``` ```
针对**野鸡番号**你需要把文件名命名为与抓取网站提供的番号一致文件拓展名除外然后把文件拖拽至core.exe/.py<br> 针对 **野鸡番号** 你需要把文件名命名为与抓取网站提供的番号一致文件拓展名除外然后把文件拖拽至core.exe/.py<br>
**野鸡番号**:比如 XXX-XXX-1这种野鸡三段式番号在javbus等资料库存在的作品。<br>除了SSNI-XXX-C后面这种-C的是指电影有中文字幕<br> **野鸡番号**:比如 ```XXX-XXX-1```, ```1301XX-MINA_YUKA``` 这种**野鸡**番号在javbus等资料库存在的作品。<br>**重要**:除了 **影片文件名** ```XXXX-XXX-C```,后面这种-C的是指电影有中文字幕<br>
条件:文件名中间要有下划线或者减号"_","-",没有多余的内容只有番号为最佳,可以让软件更好获取元数据 条件:文件名中间要有下划线或者减号"_","-",没有多余的内容只有番号为最佳,可以让软件更好获取元数据
对于多影片重命名,可以用[ReNamer](http://www.den4b.com/products/renamer)来批量重命名<br> 对于多影片重命名,可以用[ReNamer](http://www.den4b.com/products/renamer)来批量重命名<br>
### 关于PIL/image.py ### 关于PIL/image.py
@@ -178,6 +203,6 @@ COSQ-004.mp4
## 7.把JAV_output文件夹导入到EMBY,KODI中等待元数据刷新完成 ## 7.把JAV_output文件夹导入到EMBY,KODI中等待元数据刷新完成
## 8.写在后面 ## 8.写在后面
怎么样,看着自己的日本电影被这样完美地管理,是不是感觉成就感爆棚呢?<br> 怎么样,看着自己的日本电影被这样完美地管理,是不是感觉成就感爆棚呢?<br>
**tg官方电报群:[ 点击进群](https://t.me/AV_Data_Capture_Official)**<br>

124
core.py
View File

@@ -36,6 +36,13 @@ actor_photo={}
naming_rule =''#eval(config['Name_Rule']['naming_rule']) naming_rule =''#eval(config['Name_Rule']['naming_rule'])
location_rule=''#eval(config['Name_Rule']['location_rule']) location_rule=''#eval(config['Name_Rule']['location_rule'])
Config = ConfigParser()
Config.read(config_file, encoding='UTF-8')
try:
option = ReadMediaWarehouse()
except:
print('[-]Config media_warehouse read failed!')
#=====================本地文件处理=========================== #=====================本地文件处理===========================
def moveFailedFolder(): def moveFailedFolder():
global filepath global filepath
@@ -159,16 +166,17 @@ def creatFolder(): #创建文件夹
os.makedirs(path) os.makedirs(path)
#=====================资源下载部分=========================== #=====================资源下载部分===========================
def DownloadFileWithFilename(url,filename,path): #path = examle:photo , video.in the Project Folder! def DownloadFileWithFilename(url,filename,path): #path = examle:photo , video.in the Project Folder!
config = ConfigParser() try:
config.read('config.ini', encoding='UTF-8') proxy = Config['proxy']['proxy']
proxy = str(config['proxy']['proxy']) timeout = int(Config['proxy']['timeout'])
timeout = int(config['proxy']['timeout']) retry_count = int(Config['proxy']['retry'])
retry_count = int(config['proxy']['retry']) except:
print('[-]Proxy config error! Please check the config.')
i = 0 i = 0
while i < retry_count: while i < retry_count:
try: try:
if not str(config['proxy']['proxy']) == '': if not proxy == '':
if not os.path.exists(path): if not os.path.exists(path):
os.makedirs(path) os.makedirs(path)
headers = { headers = {
@@ -204,13 +212,19 @@ def DownloadFileWithFilename(url,filename,path): #path = examle:photo , video.in
except requests.exceptions.ConnectTimeout: except requests.exceptions.ConnectTimeout:
i += 1 i += 1
print('[-]Image Download : Connect retry '+str(i)+'/'+str(retry_count)) print('[-]Image Download : Connect retry '+str(i)+'/'+str(retry_count))
print('[-]Connect Failed! Please check your Proxy or Network!')
moveFailedFolder() moveFailedFolder()
def imageDownload(filepath): #封面是否下载成功否则移动到failed def imageDownload(filepath): #封面是否下载成功否则移动到failed
global path if option == 'emby':
if DownloadFileWithFilename(cover,'fanart.jpg', path) == 'failed': if DownloadFileWithFilename(cover, number + '.jpg', path) == 'failed':
moveFailedFolder()
DownloadFileWithFilename(cover, number + '.jpg', path)
print('[+]Image Downloaded!', path + '/' + number + '.jpg')
elif option == 'plex':
if DownloadFileWithFilename(cover, 'fanart.jpg', path) == 'failed':
moveFailedFolder() moveFailedFolder()
DownloadFileWithFilename(cover, 'fanart.jpg', path) DownloadFileWithFilename(cover, 'fanart.jpg', path)
print('[+]Image Downloaded!', path +'/fanart.jpg') print('[+]Image Downloaded!', path + '/fanart.jpg')
def PrintFiles(filepath): def PrintFiles(filepath):
#global path #global path
global title global title
@@ -219,6 +233,7 @@ def PrintFiles(filepath):
try: try:
if not os.path.exists(path): if not os.path.exists(path):
os.makedirs(path) os.makedirs(path)
if option == 'plex':
with open(path + "/" + number + ".nfo", "wt", encoding='UTF-8') as code: with open(path + "/" + number + ".nfo", "wt", encoding='UTF-8') as code:
print("<movie>", file=code) print("<movie>", file=code)
print(" <title>" + naming_rule + "</title>", file=code) print(" <title>" + naming_rule + "</title>", file=code)
@@ -226,9 +241,9 @@ def PrintFiles(filepath):
print(" </set>", file=code) print(" </set>", file=code)
print(" <studio>" + studio + "+</studio>", file=code) print(" <studio>" + studio + "+</studio>", file=code)
print(" <year>" + year + "</year>", file=code) print(" <year>" + year + "</year>", file=code)
print(" <outline>"+outline+"</outline>", file=code) print(" <outline>" + outline + "</outline>", file=code)
print(" <plot>"+outline+"</plot>", file=code) print(" <plot>" + outline + "</plot>", file=code)
print(" <runtime>"+str(runtime).replace(" ","")+"</runtime>", file=code) print(" <runtime>" + str(runtime).replace(" ", "") + "</runtime>", file=code)
print(" <director>" + director + "</director>", file=code) print(" <director>" + director + "</director>", file=code)
print(" <poster>poster.png</poster>", file=code) print(" <poster>poster.png</poster>", file=code)
print(" <thumb>thumb.png</thumb>", file=code) print(" <thumb>thumb.png</thumb>", file=code)
@@ -241,7 +256,7 @@ def PrintFiles(filepath):
print(" <thumb>" + value + "</thumb>", file=code) print(" <thumb>" + value + "</thumb>", file=code)
print(" </actor>", file=code) print(" </actor>", file=code)
except: except:
aaaa='' aaaa = ''
print(" <maker>" + studio + "</maker>", file=code) print(" <maker>" + studio + "</maker>", file=code)
print(" <label>", file=code) print(" <label>", file=code)
print(" </label>", file=code) print(" </label>", file=code)
@@ -251,20 +266,67 @@ def PrintFiles(filepath):
for i in tag: for i in tag:
print(" <tag>" + i + "</tag>", file=code) print(" <tag>" + i + "</tag>", file=code)
except: except:
aaaaa='' aaaaa = ''
try: try:
for i in tag: for i in tag:
print(" <genre>" + i + "</genre>", file=code) print(" <genre>" + i + "</genre>", file=code)
except: except:
aaaaaaaa='' aaaaaaaa = ''
if cn_sub == '1': if cn_sub == '1':
print(" <genre>中文字幕</genre>", file=code) print(" <genre>中文字幕</genre>", file=code)
print(" <num>" + number + "</num>", file=code) print(" <num>" + number + "</num>", file=code)
print(" <release>" + release + "</release>", file=code) print(" <release>" + release + "</release>", file=code)
print(" <cover>"+cover+"</cover>", file=code) print(" <cover>" + cover + "</cover>", file=code)
print(" <website>" + website + "</website>", file=code) print(" <website>" + website + "</website>", file=code)
print("</movie>", file=code) print("</movie>", file=code)
print("[+]Writeed! "+path + "/" + number + ".nfo") print("[+]Writeed! " + path + "/" + number + ".nfo")
elif option == 'emby':
with open(path + "/" + number + ".nfo", "wt", encoding='UTF-8') as code:
print("<movie>", file=code)
print(" <title>" + naming_rule + "</title>", file=code)
print(" <set>", file=code)
print(" </set>", file=code)
print(" <studio>" + studio + "+</studio>", file=code)
print(" <year>" + year + "</year>", file=code)
print(" <outline>" + outline + "</outline>", file=code)
print(" <plot>" + outline + "</plot>", file=code)
print(" <runtime>" + str(runtime).replace(" ", "") + "</runtime>", file=code)
print(" <director>" + director + "</director>", file=code)
print(" <poster>" + number + ".png</poster>", file=code)
print(" <thumb>" + number + ".png</thumb>", file=code)
print(" <fanart>" + number + '.jpg' + "</fanart>", file=code)
try:
for key, value in actor_photo.items():
print(" <actor>", file=code)
print(" <name>" + key + "</name>", file=code)
if not actor_photo == '': # or actor_photo == []:
print(" <thumb>" + value + "</thumb>", file=code)
print(" </actor>", file=code)
except:
aaaa = ''
print(" <maker>" + studio + "</maker>", file=code)
print(" <label>", file=code)
print(" </label>", file=code)
if cn_sub == '1':
print(" <tag>中文字幕</tag>", file=code)
try:
for i in tag:
print(" <tag>" + i + "</tag>", file=code)
except:
aaaaa = ''
try:
for i in tag:
print(" <genre>" + i + "</genre>", file=code)
except:
aaaaaaaa = ''
if cn_sub == '1':
print(" <genre>中文字幕</genre>", file=code)
print(" <num>" + number + "</num>", file=code)
print(" <release>" + release + "</release>", file=code)
print(" <cover>" + cover + "</cover>", file=code)
print(" <website>" + "https://www.javbus.com/" + number + "</website>", file=code)
print("</movie>", file=code)
print("[+]Writeed! " + path + "/" + number + ".nfo")
except IOError as e: except IOError as e:
print("[-]Write Failed!") print("[-]Write Failed!")
print(e) print(e)
@@ -274,6 +336,7 @@ def PrintFiles(filepath):
print("[-]Write Failed!") print("[-]Write Failed!")
moveFailedFolder() moveFailedFolder()
def cutImage(): def cutImage():
if option == 'plex':
if imagecut == 1: if imagecut == 1:
try: try:
img = Image.open(path + '/fanart.jpg') img = Image.open(path + '/fanart.jpg')
@@ -289,12 +352,39 @@ def cutImage():
w = img.width w = img.width
h = img.height h = img.height
img.save(path + '/poster.png') img.save(path + '/poster.png')
elif option == 'emby':
if imagecut == 1:
try:
img = Image.open(path + '/' + number + '.jpg')
imgSize = img.size
w = img.width
h = img.height
img2 = img.crop((w / 1.9, 0, w, h))
img2.save(path + '/' + number + '.png')
except:
print('[-]Cover cut failed!')
else:
img = Image.open(path + '/' + number + '.jpg')
w = img.width
h = img.height
img.save(path + '/' + number + '.png')
def pasteFileToFolder(filepath, path): #文件路径,番号,后缀,要移动至的位置 def pasteFileToFolder(filepath, path): #文件路径,番号,后缀,要移动至的位置
global houzhui global houzhui
houzhui = str(re.search('[.](AVI|RMVB|WMV|MOV|MP4|MKV|FLV|TS|avi|rmvb|wmv|mov|mp4|mkv|flv|ts)$', filepath).group()) houzhui = str(re.search('[.](AVI|RMVB|WMV|MOV|MP4|MKV|FLV|TS|avi|rmvb|wmv|mov|mp4|mkv|flv|ts)$', filepath).group())
try:
os.rename(filepath, number + houzhui) os.rename(filepath, number + houzhui)
except FileExistsError:
print('[-]File Exists! Please check your movie!')
print('[-]move to the root folder of the program.')
os._exit(0)
try:
shutil.move(number + houzhui, path) shutil.move(number + houzhui, path)
except:
print('[-]File Exists! Please check your movie!')
print('[-]move to the root folder of the program.')
os._exit(0)
def renameJpgToBackdrop_copy(): def renameJpgToBackdrop_copy():
if option == 'plex':
shutil.copy(path + '/fanart.jpg', path + '/Backdrop.jpg') shutil.copy(path + '/fanart.jpg', path + '/Backdrop.jpg')
shutil.copy(path + '/poster.png', path + '/thumb.png') shutil.copy(path + '/poster.png', path + '/thumb.png')

View File

@@ -1,5 +1,5 @@
{ {
"version": "0.11.5", "version": "0.11.6",
"version_show":"Beta 11.5", "version_show":"Beta 11.6",
"download": "https://github.com/wenead99/AV_Data_Capture/releases" "download": "https://github.com/wenead99/AV_Data_Capture/releases"
} }