优化jellyfin搜刮器

This commit is contained in:
2021-11-17 14:17:38 +08:00
parent a6b9e4a6ac
commit 8ef33f382e
19 changed files with 574 additions and 191 deletions

View File

@@ -26,73 +26,81 @@ public class ApplicationInit implements ApplicationRunner {
public void run(ApplicationArguments args) throws Exception {
AudioTools.init();
new Timer().schedule(new TimerTask() {
boolean powerOffice=false;
boolean powerLow=false;
boolean powerOffice = false;
boolean powerLow = false;
@Override
public void run() {
String time = new SimpleDateFormat("HH:mm").format(new Date());
if (time.equals(oldTime)) {
return;
}
float power=Tools.getSystemUPSPower();
if(power>0) {
if (power == 100) {
AppTools.exec("wakeonlan 00:F0:D2:D0:6B:B5", null, false, true);
powerLow=false;
powerOffice=false;
}
if (power < 99 && !powerOffice) {
powerOffice = true;
QQBotManager.getInstance().sendMessage("UPS进入电池模式:" + power);
}
if (power < 50 && !powerLow) {
powerLow = true;
QQBotManager.getInstance().sendMessage("UPS电池低于50%,即将关机");
}
}
oldTime = time;
switch (time) {
case "00:00":
musicTools.scanMusic();
break;
case "01:00":
DepotManager.scan();
break;
case "08:00":
case "20:00":
QQBotManager.getInstance().reportToDayBangumi();
break;
case "23:59":
QQSetu.printTodaySetu();
break;
try {
}
switch (time) {
case "00:00":
case "01:00":
case "02:00":
case "03:00":
case "04:00":
case "05:00":
case "06:00":
case "07:00":
case "08:00":
case "09:00":
case "10:00":
case "11:00":
case "12:00":
case "13:00":
case "14:00":
case "15:00":
case "16:00":
case "17:00":
case "18:00":
case "19:00":
case "20:00":
case "21:00":
case "22:00":
case "23:00":
BTDownloadManager.getInstance().start();
String time = new SimpleDateFormat("HH:mm").format(new Date());
if (time.equals(oldTime)) {
return;
}
float power = Tools.getSystemUPSPower();
if (power > 0) {
if (power == 100) {
AppTools.exec("wakeonlan 00:F0:D2:D0:6B:B5", null, false, true);
powerLow = false;
powerOffice = false;
}
if (power < 99 && !powerOffice) {
powerOffice = true;
Log.i("UPS", "UPS进入电池模式:" + power);
QQBotManager.getInstance().sendMessage("UPS进入电池模式:" + power);
}
if (power < 30 && !powerLow) {
powerLow = true;
Log.i("UPS电池低于30%,即将关机");
QQBotManager.getInstance().sendMessage("UPS电池低于30%,即将关机");
}
}
oldTime = time;
switch (time) {
case "00:00":
musicTools.scanMusic();
break;
case "01:00":
DepotManager.scan();
break;
case "08:00":
case "20:00":
QQBotManager.getInstance().reportToDayBangumi();
break;
case "23:59":
QQSetu.printTodaySetu();
break;
}
switch (time) {
case "00:00":
case "01:00":
case "02:00":
case "03:00":
case "04:00":
case "05:00":
case "06:00":
case "07:00":
case "08:00":
case "09:00":
case "10:00":
case "11:00":
case "12:00":
case "13:00":
case "14:00":
case "15:00":
case "16:00":
case "17:00":
case "18:00":
case "19:00":
case "20:00":
case "21:00":
case "22:00":
case "23:00":
BTDownloadManager.getInstance().start();
}
} catch (Exception e) {
Log.e("AppTimer", e);
}
}
}, 0, 35 * 1000);

View File

@@ -2,24 +2,24 @@ package com.yutou.nas.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yutou.nas.Datas.Jellyfin.Episode;
import com.yutou.nas.Datas.Jellyfin.EpisodeData;
import com.yutou.nas.Datas.Jellyfin.ItemInfo;
import com.yutou.nas.Datas.Jellyfin.LibsItem;
import com.yutou.nas.bangumi.BangumiTools;
import com.yutou.nas.interfaces.DownloadInterface;
import lombok.Data;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.time.OffsetDateTime;
import java.util.*;
public class JellyfinAPIManager {
private List<LibsItem> mediaItem=new ArrayList<>();
private List<LibsItem> mediaItem = new ArrayList<>();
public JellyfinAPIManager() {
mediaItem=getAllItem();
mediaItem = getAllItem();
}
public LibsItem getLibs(String key) {
@@ -40,8 +40,8 @@ public class JellyfinAPIManager {
}
public ItemInfo getInfo(String id) {
String http = HttpTools.https_get("http://192.168.31.88:8096/Users/e8a13675bb64466dbd81f1e5985ef8c7/Items/"+id, getHeader());
return JSONObject.parseObject(http,ItemInfo.class);
String http = HttpTools.https_get("http://192.168.31.88:8096/Users/e8a13675bb64466dbd81f1e5985ef8c7/Items/" + id, getHeader());
return JSONObject.parseObject(http, ItemInfo.class);
}
public List<LibsItem> getAllItem() {
@@ -56,7 +56,7 @@ public class JellyfinAPIManager {
return list;
}
public List<JellyfinAPIManager.LibsItem> getLibsItems(String id) {
public List<LibsItem> getLibsItems(String id) {
String httpText = HttpTools.https_get("http://192.168.31.88:8096/Users/e8a13675bb64466dbd81f1e5985ef8c7/Items?ParentId=" + id, getHeader());
JSONObject json = JSONObject.parseObject(httpText);
JSONArray items = json.getJSONArray("Items");
@@ -69,6 +69,35 @@ public class JellyfinAPIManager {
), getHeader());
return JSONObject.parseObject(data);
}
public JSONObject getEpisodesForJson(String parentID,String id){
String data = HttpTools.https_get(String.format("http://192.168.31.88:8096/Shows/%s/Episodes?seasonId=%s&userId=e8a13675bb64466dbd81f1e5985ef8c7",
parentID,
id
), getHeader());
return JSONObject.parseObject(data);
}
public List<Episode> getEpisodes(String parentId,String id){
JSONObject json=getEpisodesForJson(parentId, id);
JSONArray episodes=json.getJSONArray("Items");
return JSONArray.parseArray(episodes.toJSONString(), Episode.class);
}
public JSONObject getEpisodesDataForJson(String id){
String data = HttpTools.https_get(String.format("http://192.168.31.88:8096/Users/e8a13675bb64466dbd81f1e5985ef8c7/Items/%s",
id
), getHeader());
return JSONObject.parseObject(data);
}
public EpisodeData getEpisodeData(String id){
return JSONObject.parseObject(getEpisodesDataForJson(id).toString(), EpisodeData.class);
}
public String getPathForEpisode(String parentId,String id){
List<Episode> list=getEpisodes(parentId, id);
if(!list.isEmpty()){
return getEpisodeData(list.get(0).getId()).getPath();
}
return null;
}
public void uploadImage(File image, String id, String model) {
@@ -92,7 +121,7 @@ public class JellyfinAPIManager {
}
}
public void saveJellyfinMetaData(JSONObject info, JellyfinAPIManager.LibsItem item) {
public void saveJellyfinMetaData(JSONObject info, LibsItem item) {
JSONArray airDate = new JSONArray();
airDate.add(info.getString("air_date"));
JSONObject providerIds = new JSONObject();
@@ -172,94 +201,20 @@ public class JellyfinAPIManager {
return header;
}
@Data
public static class LibsItem {
private String name;
private String serverID;
private String id;
private Object channelID;
private boolean isFolder;
private String type;
private UserData userData;
private String collectionType;
private ImageTags imageTags;
private List<Object> backdropImageTags;
private Object imageBlurHashes;
private String locationType;
private ItemInfo info;
}
@Data
public static class ItemInfo {
private String name;
private String serverID;
private String id;
private String etag;
private OffsetDateTime dateCreated;
private OffsetDateTime dateLastMediaAdded;
private boolean canDelete;
private boolean canDownload;
private String sortName;
private Object[] externalUrls;
private String path;
private boolean enableMediaSourceDisplay;
private Object channelID;
private Object[] taglines;
private Object[] genres;
private String playAccess;
private Object[] remoteTrailers;
private boolean isFolder;
private String parentID;
private String type;
private Object[] people;
private Object[] studios;
private Object[] genreItems;
private long localTrailerCount;
private UserData userData;
private long recursiveItemCount;
private long childCount;
private long specialFeatureCount;
private String displayPreferencesID;
private Object[] airDays;
private Object[] tags;
private double primaryImageAspectRatio;
private ImageTags imageTags;
private String[] backdropImageTags;
private Object[] screenshotImageTags;
private String locationType;
private Object[] lockedFields;
private boolean lockData;
public String getPath() {
if(AppTools.isRuntimeSystemOfWindow()){
path=path.replace("/media/yutou/disk_lvm/public/download/anim/","Z:\\download\\anim\\");
}
return path;
}
}
@Data
public static class UserData {
private long playbackPositionTicks;
private long playCount;
private boolean isFavorite;
private boolean played;
private String key;
}
@Data
public static class ImageTags {
private String primary;
}
public void testItem(String id) {
JellyfinAPIManager manager = new JellyfinAPIManager();
JellyfinAPIManager.LibsItem item = manager.getLibs("番剧");
LibsItem item = manager.getLibs("番剧");
if (item != null) {
List<JellyfinAPIManager.LibsItem> list;
List<LibsItem> list;
list = manager.getLibsItems(item.getId());
for (JellyfinAPIManager.LibsItem libsItem : list) {
for (LibsItem libsItem : list) {
if ("轻音少女".equals(libsItem.getName())) {
/* saveJellyfinMetaData(
BangumiTools.getBangumiInfo(1424),
@@ -274,19 +229,19 @@ public class JellyfinAPIManager {
System.out.println(_json.getString("Name"));
if (_json.getString("Name").equals("第一季")) {
JellyfinAPIManager.LibsItem _item = JSONObject.parseObject(_json.toJSONString(), JellyfinAPIManager.LibsItem.class);
LibsItem _item = JSONObject.parseObject(_json.toJSONString(), LibsItem.class);
manager.saveJellyfinMetaData(
BangumiTools.getBangumiInfo(1424),
_item
);
} else if (_json.getString("Name").equals("第二季")) {
JellyfinAPIManager.LibsItem _item = JSONObject.parseObject(_json.toJSONString(), JellyfinAPIManager.LibsItem.class);
LibsItem _item = JSONObject.parseObject(_json.toJSONString(), LibsItem.class);
manager.saveJellyfinMetaData(
BangumiTools.getBangumiInfo(3774),
_item
);
} else if (_json.getString("Name").contains("[剧场版]")) {
JellyfinAPIManager.LibsItem _item = JSONObject.parseObject(_json.toJSONString(), JellyfinAPIManager.LibsItem.class);
LibsItem _item = JSONObject.parseObject(_json.toJSONString(), LibsItem.class);
manager.saveJellyfinMetaData(
BangumiTools.getBangumiInfo(12426),
_item
@@ -304,7 +259,7 @@ public class JellyfinAPIManager {
public void search(String name, File path) {
for (LibsItem item : mediaItem) {
System.out.println(item.getName()+" > "+item.getInfo().getPath());
System.out.println(item.getName() + " > " + item.getInfo().getPath());
}
}
@@ -322,12 +277,58 @@ public class JellyfinAPIManager {
String id = ConfigTools.loadIni(file, "id");
if (id != null) {
for (LibsItem item : mediaItem) {
/*if (item.getName().equals("你遭难了吗?")) {
if(item.getInfo().getPath().contains(path.getPath())){
System.out.println(item.getName()+" "+id);
// new JellyfinAPIManager().saveJellyfinMetaData(BangumiTools.getBangumiInfo(Integer.parseInt(id)),item);
// System.out.println(item.getName()+" "+item.getId());
//System.out.println(getItemShows(item.getId()));
List<LibsItem> _temp = getLibsItems(item.getId());
System.out.println(item.getInfo().getPath() + " " + _temp.size());
if (_temp.size() > 1) {
for (LibsItem libsItem : _temp) {
ItemInfo info = getInfo(libsItem.getId());
if (info.getPath()==null){
System.out.println(getPathForEpisode(info.getParentID(),info.getId())+" > "+path.getPath());
//System.out.println(getPathForEpisode(info.getParentID(),info.getId()).contains(path.getPath()));
}
}
}
System.exit(0);
break;
}*/
List<LibsItem> _temp = getLibsItems(item.getId());
if(_temp.size()==1){
if (item.getInfo().getPath().contains(path.getPath())) {
System.out.println(item.getName()+" "+id);
new JellyfinAPIManager().saveJellyfinMetaData(BangumiTools.getBangumiInfo(Integer.parseInt(id)),item);
break;
}
}else{
System.out.println(item.getName()+" > "+_temp.size());
for (LibsItem libsItem : _temp) {
ItemInfo info = getInfo(libsItem.getId());
if(info.getPath()!=null) {
if (info.getPath().contains(path.getPath())) {
System.out.println("list > " + item.getName() + " " + id);
new JellyfinAPIManager().saveJellyfinMetaData(BangumiTools.getBangumiInfo(Integer.parseInt(id)), libsItem);
break;
}
}else{
String ep_Path=getPathForEpisode(info.getParentID(),info.getId());
if(ep_Path!=null&&ep_Path.contains(path.getPath())){
System.out.println("list > " + item.getName() + " " + id);
new JellyfinAPIManager().saveJellyfinMetaData(BangumiTools.getBangumiInfo(Integer.parseInt(id)), libsItem);
break;
}
}
}
}
/* if (item.getInfo().getPath().contains(path.getPath())) {
//System.out.println(item.getName()+" "+id);
// new JellyfinAPIManager().saveJellyfinMetaData(BangumiTools.getBangumiInfo(Integer.parseInt(id)),item);
break;
}*/
}
}
}
@@ -346,6 +347,7 @@ public class JellyfinAPIManager {
public static void main(String[] args) {
File file = new File("Z:\\download\\anim\\");
//new JellyfinAPIManager().search(file.getName(), file);
new JellyfinAPIManager().init(file);
JellyfinAPIManager manager=new JellyfinAPIManager();
manager.init(file);
}
}

View File

@@ -14,4 +14,11 @@ public class Log {
}
}
public static void e(String tag,Exception e){
System.err.printf("[%s]%s - %s%n",
AppTools.getToDayNowTimeToString(),
tag,
Tools.getExceptionString(e)
);
}
}

View File

@@ -256,6 +256,7 @@ public class QQBotManager {
sendVersion();
break;
case QQCommands.QQ_BANGUMI_TODAY:
RedisTools.remove("reportToDayBangumi");
QQBotManager.getInstance().sendMessage(BangumiTools.reportToDayBangumi());
break;
case QQCommands.QQ_BANGUMI_LIST:

View File

@@ -398,13 +398,11 @@ public class Tools {
@Override
public void out(String data) {
super.out(data);
System.out.println("尝试获取电量:"+data);
Pattern pattern=Pattern.compile("[0-9]*\\.?[0-9]");
Matcher matcher=pattern.matcher(data);
if(matcher.find()) {
String ups = matcher.group();
UPSPower=Float.parseFloat(ups);
System.out.println("电量:"+UPSPower);
}
}
},false,true);