优化jellyfin搜刮器
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user