1
0
mirror of https://github.com/mitb-archive/filebot synced 2024-11-14 05:15:03 -05:00

Add anime-lists parser

* https://github.com/ScudLee/anime-lists
This commit is contained in:
Reinhard Pointner 2019-06-08 00:51:39 +07:00
parent ffa0690bfc
commit 2a44dcc1d6

View File

@ -0,0 +1,110 @@
package net.filebot.web;
import static net.filebot.CachedResource.*;
import static net.filebot.util.StringUtilities.*;
import java.io.ByteArrayInputStream;
import java.net.URL;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import net.filebot.Cache;
import net.filebot.CacheType;
import net.filebot.Resource;
public enum AnimeLists {
AniDB, TheTVDB;
public static final Resource<Model> MODEL = Resource.lazy(AnimeLists::fetchModel);
protected static Cache getCache() {
return Cache.getCache("animelists", CacheType.Monthly);
}
protected static Model fetchModel() throws Exception {
Cache cache = getCache();
// NOTE: GitHub only supports If-None-Match (If-Modified-Since is ignored)
byte[] xml = cache.bytes("anime-list.xml", r -> {
return new URL("https://raw.githubusercontent.com/ScudLee/anime-lists/master/" + r);
}).fetch(fetchIfNoneMatch(URL::getFile, cache)).expire(Cache.ONE_MONTH).get();
return (Model) JAXBContext.newInstance(Model.class).createUnmarshaller().unmarshal(new ByteArrayInputStream(xml));
}
@XmlRootElement(name = "anime-list")
public static class Model {
@XmlElement
public Entry[] anime;
}
public static class Entry {
@XmlAttribute
public Integer anidbid;
@XmlJavaTypeAdapter(OptionalIntegerAdapter.class)
@XmlAttribute
public Integer tvdbid;
@XmlJavaTypeAdapter(OptionalIntegerAdapter.class)
@XmlAttribute
public Integer defaulttvdbseason;
@XmlJavaTypeAdapter(OptionalIntegerAdapter.class)
@XmlAttribute
public Integer episodeoffset;
@XmlElementWrapper(name = "mapping-list")
public Mapping[] mapping;
}
public static class Mapping {
@XmlAttribute
public Integer anidbseason;
@XmlAttribute
public Integer tvdbseason;
@XmlAttribute
public Integer start;
@XmlAttribute
public Integer end;
@XmlAttribute
public Integer offset;
@XmlValue
public String value;
}
private static class OptionalIntegerAdapter extends XmlAdapter<String, Integer> {
@Override
public Integer unmarshal(String s) throws Exception {
return matchInteger(s);
}
@Override
public String marshal(Integer i) throws Exception {
return String.valueOf(i);
}
}
public static void main(String[] args) throws Exception {
System.out.println(AnimeLists.MODEL.get());
System.exit(0);
}
}