diff --git a/htroot/FeedReader_p.html b/htroot/FeedReader_p.html index 2d95a1c27..46e25bfa8 100644 --- a/htroot/FeedReader_p.html +++ b/htroot/FeedReader_p.html @@ -20,5 +20,12 @@ please select your feed with ?url=Feedurl&max=5&offset=1 (to be implemented in h #{/items}# :: -Error + +Error: +#(error)# +You need to install libx +:: +Problem with url +#(/error)# +test #(/page)# \ No newline at end of file diff --git a/htroot/FeedReader_p.java b/htroot/FeedReader_p.java new file mode 100644 index 000000000..577c8f47c --- /dev/null +++ b/htroot/FeedReader_p.java @@ -0,0 +1,143 @@ +//FeedReader_p.java +//------------ +// part of YACY +// +// (C) 2007 Alexander Schier +// +// last change: $LastChangedDate: $ by $LastChangedBy: $ +// $LastChangedRevision: $ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collection; +import java.util.Iterator; + +import de.anomic.data.rssReaderItem; +import de.anomic.http.httpHeader; +import de.anomic.server.serverObjects; +import de.anomic.server.serverSwitch; +import de.anomic.server.servletProperties; + +public class FeedReader_p { + + Class rssReaderClass; + String url; + Object reader; + public FeedReader_p(String url) throws ClassNotFoundException{ + this.url=url; + //reflection + Class[] paramClasses=new Class[1]; + Object[] params=new Object[1]; + paramClasses[0]=Class.forName("java.lang.String"); + rssReaderClass=Class.forName("de.anomic.data.rssReader"); + params[0]=url.toString(); + Constructor constructor; + try { + constructor = rssReaderClass.getConstructor(paramClasses); + reader=constructor.newInstance(params); + } + catch (SecurityException e) {} + catch (NoSuchMethodException e) {} + catch (IllegalArgumentException e) {} + catch (InstantiationException e) {} + catch (IllegalAccessException e) {} + catch (InvocationTargetException e) {} + + } + //this could be in the servlet class(?) + public Object ReflectionWrapper(Class theclass, Object theinstance, String method, Class[] class_array, Object[] object_array){ + try { + return theclass.getMethod(method, class_array).invoke(theinstance, object_array); + } + catch (IllegalArgumentException e) {} + catch (SecurityException e) {} + catch (IllegalAccessException e) {} + catch (InvocationTargetException e) {} + catch (NoSuchMethodException e) {} + return null; + } + public String getTitle(){ + return (String) ReflectionWrapper(rssReaderClass, reader, "getTitle", null, null); + } + public String getCreator(){ + return (String) ReflectionWrapper(rssReaderClass, reader, "getCreator", new Class[0], new Object[0]); + } + public String getDescription(){ + return (String) ReflectionWrapper(rssReaderClass, reader, "getDescription", new Class[0], new Object[0]); + } + public Collection getFeedItems(){ + return (Collection) ReflectionWrapper(rssReaderClass, reader, "getFeedItems", new Class[0], new Object[0]); + } + public static servletProperties respond(httpHeader header, serverObjects post, serverSwitch env) { + servletProperties prop = new servletProperties(); + prop.put("SUPERTEMPLATE", "/env/page.html"); + + URL url; + prop.put("page", 0); + try { + if(post!=null){ + url = new URL((String) post.get("url")); + int maxitems=Integer.parseInt(post.get("max", "0")); + int offset=Integer.parseInt(post.get("offset", "0")); //offset to the first displayed item + FeedReader_p self; + try { + self = new FeedReader_p(url.toString()); + } catch (ClassNotFoundException e) { + System.out.println("DEBUG!!!"); + prop.put("page", 2); + prop.put("page_error", 0); + return prop; + } + + //rssReader reader=new rssReader(url.toString()); + prop.put("page_title", self.getTitle()); + if(self.getCreator()!=null){ + prop.put("page_hasAuthor", 1); + prop.put("page_hasAuthor_author", self.getCreator()); + }else + prop.put("page_hasAuthor", 0); + prop.put("page_description", self.getDescription()); + + Collection feedItems=self.getFeedItems(); + if(feedItems!=null && !feedItems.isEmpty()){ + Iterator it=feedItems.iterator(); + int count=0; + while(it.hasNext() && (maxitems==0 || count0)) //first check, if there still is an offset. if yes, skip count++, so the next item will overwrite this item. then decrement offset. + count++; + } + prop.put("page_items", count); + } + prop.put("page", 1); + } + } catch (MalformedURLException e) { + prop.put("page", 2); + prop.put("page_error", 1); + } + + // return rewrite properties + return prop; + } +} diff --git a/htroot/FeedReader_p.java.disabled b/htroot/FeedReader_p.java.disabled deleted file mode 100644 index 7524fb73f..000000000 --- a/htroot/FeedReader_p.java.disabled +++ /dev/null @@ -1,92 +0,0 @@ -//FeedReader_p.java -//------------ -// part of YACY -// -// (C) 2007 Alexander Schier -// -// last change: $LastChangedDate: $ by $LastChangedBy: $ -// $LastChangedRevision: $ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Collection; -import java.util.Iterator; - -import de.anomic.http.httpHeader; -import de.anomic.server.serverObjects; -import de.anomic.server.serverSwitch; -import de.anomic.server.servletProperties; -import de.nava.informa.core.ChannelIF; -import de.nava.informa.core.ParseException; -import de.nava.informa.impl.basic.ChannelBuilder; -import de.nava.informa.impl.basic.Item; -import de.nava.informa.parsers.FeedParser; - -public class FeedReader_p { - - - public static servletProperties respond(httpHeader header, serverObjects post, serverSwitch env) { - servletProperties prop = new servletProperties(); - prop.put("SUPERTEMPLATE", "/env/page.html"); - - URL url; - try { - if(post!=null){ - url = new URL((String) post.get("url")); - int maxitems=Integer.parseInt(post.get("max", "0")); - int offset=Integer.parseInt(post.get("offset", "0")); //offset to the first displayed item - ChannelBuilder builder=new ChannelBuilder(); - ChannelIF channel=FeedParser.parse(builder, url); - prop.put("page_title", channel.getTitle()); - if(channel.getCreator()!=null){ - prop.put("page_hasAuthor", 1); - prop.put("page_hasAuthor_author", channel.getCreator()); - }else - prop.put("page_hasAuthor", 0); - prop.put("page_description", channel.getDescription()); - - Collection feedItems=channel.getItems(); - if(!feedItems.isEmpty()){ - Iterator it=feedItems.iterator(); - int count=0; - while(it.hasNext() && (maxitems==0 || count0)) //first check, if there still is an offset. if yes, skip count++, so the next item will overwrite this item. then decrement offset. - count++; - } - prop.put("page_items", count); - } - prop.put("page", 1); - } - } catch (MalformedURLException e) { - prop.put("page", 2); - } catch (IOException e) { - prop.put("page", 2); - } catch (ParseException e) { - prop.put("page", 2); - } - - // return rewrite properties - return prop; - } -} diff --git a/source/de/anomic/data/rssReader.java b/source/de/anomic/data/rssReader.java new file mode 100644 index 000000000..c2dea3ba1 --- /dev/null +++ b/source/de/anomic/data/rssReader.java @@ -0,0 +1,73 @@ +//rssReader.java +//------------ +// part of YACY +// +// (C) 2007 Alexander Schier +// +// last change: $LastChangedDate: $ by $LastChangedBy: $ +// $LastChangedRevision: $ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +package de.anomic.data; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collection; +import java.util.Iterator; +import java.util.TreeSet; + +import de.nava.informa.core.ChannelIF; +import de.nava.informa.core.ParseException; +import de.nava.informa.impl.basic.ChannelBuilder; +import de.nava.informa.parsers.FeedParser; + +public class rssReader { + URL url; + ChannelIF channel; + TreeSet feedItems; + public rssReader(String url) throws MalformedURLException{ + this.url=new URL(url); + ChannelBuilder builder=new ChannelBuilder(); + try { + channel=FeedParser.parse(builder, url); + Collection oldfeedItems=channel.getItems(); + feedItems=new TreeSet(new rssReaderItemComparator()); + Iterator it=oldfeedItems.iterator(); + int count=0; + while(it.hasNext()){ + de.nava.informa.impl.basic.Item item=(de.nava.informa.impl.basic.Item) it.next(); + rssReaderItem newItem=new rssReaderItem(count++, item.getLink(), item.getTitle(), item.getDescription(), item.getDate(), item.getCreator()); + feedItems.add(newItem); + } + } + catch (IOException e) {} + catch (ParseException e) {} + } + public String getCreator(){ + return (channel!=null)? channel.getCreator(): null; + } + public String getTitle(){ + return (channel!=null)? channel.getTitle(): null; + } + public String getDescription(){ + return (channel!=null)? channel.getDescription(): null; + } + public Collection getFeedItems(){ + return feedItems; + } + +} diff --git a/source/de/anomic/data/rssReaderItem.java b/source/de/anomic/data/rssReaderItem.java new file mode 100644 index 000000000..e22c57228 --- /dev/null +++ b/source/de/anomic/data/rssReaderItem.java @@ -0,0 +1,62 @@ +//rssReaderItem.java +//------------ +// part of YACY +// +// (C) 2007 Alexander Schier +// +// last change: $LastChangedDate: $ by $LastChangedBy: $ +// $LastChangedRevision: $ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +package de.anomic.data; + +import java.net.URL; +import java.util.Date; + + +public class rssReaderItem{ + String creator, title, description; + Date date; + URL link; + int num; + public rssReaderItem(int num, URL link, String title, String description, Date date, String creator){ + this.link=link; + this.title=title; + this.description=description; + this.date=date; + this.creator=creator; + this.num=num; + } + public URL getLink(){ + return link; + } + public String getTitle(){ + return (title!=null)? title: ""; + } + public String getDescription(){ + return (description!=null)? description: ""; + } + public Date getDate(){ + return (date!=null)? date: new Date(); + } + public String getCreator(){ + return (creator!=null)? creator: ""; + } + public int getNum(){ + return num; + } + +} \ No newline at end of file diff --git a/source/de/anomic/data/rssReaderItemComparator.java b/source/de/anomic/data/rssReaderItemComparator.java new file mode 100644 index 000000000..e52cf02b3 --- /dev/null +++ b/source/de/anomic/data/rssReaderItemComparator.java @@ -0,0 +1,36 @@ +//rssReaderItemComparator.java +//------------ +// part of YACY +// +// (C) 2007 Alexander Schier +// +// last change: $LastChangedDate: $ by $LastChangedBy: $ +// $LastChangedRevision: $ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +package de.anomic.data; + +import java.util.Comparator; + +public class rssReaderItemComparator implements Comparator{ + public int compare(Object o1, Object o2){ + int num1=((rssReaderItem)o1).getNum(); + int num2=((rssReaderItem)o2).getNum(); + return num2-num1; + } + public boolean equals(Object o1, Object o2){ + return compare(o1, o2)==0; + } +} \ No newline at end of file