added very rudimentary peer news as rss feed. An example can be retrieved with

http://localhost:8080/xml/feed.rss?channel=PEERNEWS
to be extended and integrated in interface ...

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4738 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 17 years ago
parent 6495227ad6
commit bac38cfa18

@ -0,0 +1,83 @@
// feed.java
// (C) 2008 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
// first published 25.04.2008 on http://yacy.net
//
// This is a part of YaCy, a peer-to-peer based web search engine
//
// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $
// $LastChangedRevision: 1986 $
// $LastChangedBy: orbiter $
//
// LICENSE
//
// 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 xml;
import de.anomic.http.httpHeader;
import de.anomic.server.serverObjects;
import de.anomic.server.serverSwitch;
import de.anomic.xml.RSSFeed;
import de.anomic.xml.RSSMessage;
public class feed {
public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch<?> env) {
//plasmaSwitchboard sb = (plasmaSwitchboard) env;
// insert default values
serverObjects prop = new serverObjects();
prop.put("channel_title", "");
prop.put("channel_description", "");
prop.put("channel_pubDate", "");
prop.put("item", "0");
if ((post == null) || (env == null)) return prop;
//boolean authorized = sb.adminAuthenticated(header) >= 2;
String channelName = post.get("channel");
if (channelName == null) return prop;
RSSFeed feed = RSSFeed.channels(channelName);
if ((feed == null) || (feed.size() == 0)) return prop;
int count = post.getInt("count", 10);
RSSMessage message = feed.getChannel();
if (message != null) {
prop.put("channel_title", message.getTitle());
prop.put("channel_description", message.getDescription());
prop.put("channel_pubDate", message.getPubDate());
}
int c = 0;
while ((count > 0) && (feed.size() > 0)) {
message = feed.pollMessage();
if (message == null) continue;
// create RSS entry
prop.putHTML("item_" + c + "_title", message.getTitle());
prop.putHTML("item_" + c + "_description", message.getDescription());
prop.putHTML("item_" + c + "_link", message.getLink());
prop.put("item_" + c + "_pubDate", message.getPubDate());
prop.put("item_" + c + "_guid", message.getGuid());
c++;
count--;
}
prop.put("item", c);
// return rewrite properties
return prop;
}
}

@ -0,0 +1,21 @@
<?xml version="1.0"?>
<rss>
<!-- rss standard channel -->
<channel>
<title>#[channel_title]#</title>
<description>#[channel_description]#</description>
<pubDate>#[channel_pubDate]#</pubDate>
<!-- messages -->
#{item}#
<item>
<title>#[title]#</title>
<link>#[link]#</link>
<description>#[description]#</description>
<pubDate>#[pubDate]#</pubDate>
<guid isPermaLink="false">#[guid]#</guid>
</item>
#{/item}#
</channel>
</rss>

@ -611,7 +611,7 @@ public final class plasmaCondenser {
}
private static StringBuffer trim(StringBuffer sb) {
static StringBuffer trim(StringBuffer sb) {
while ((sb.length() > 0) && (sb.charAt(0) <= ' ')) sb = sb.deleteCharAt(0);
while ((sb.length() > 0) && (sb.charAt(sb.length() - 1) <= ' ')) sb = sb.deleteCharAt(sb.length() - 1);
return sb;

@ -35,8 +35,8 @@ public class RSSFeed implements Iterable<RSSMessage> {
// class variables
private RSSMessage channel;
private String imageURL;
private ConcurrentLinkedQueue<String> messageQueue; // a list of GUIDs, so the items can be retrieved by a specific order
private ConcurrentHashMap<String, RSSMessage> messages; // a guid:Item map
ConcurrentLinkedQueue<String> messageQueue; // a list of GUIDs, so the items can be retrieved by a specific order
ConcurrentHashMap<String, RSSMessage> messages; // a guid:Item map
private int maxsize;
public RSSFeed() {
@ -136,6 +136,7 @@ public class RSSFeed implements Iterable<RSSMessage> {
RSSFeed feed = channels.get(channelName);
if (feed != null) return feed;
feed = new RSSFeed();
feed.setChannel(new RSSMessage(channelName, ""));
channels.put(channelName, feed);
return feed;
}

@ -27,6 +27,7 @@
package de.anomic.xml;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@ -58,6 +59,14 @@ public class RSSMessage {
private HashMap<String, String> map;
public RSSMessage(String title, String description) {
this();
setValue("title", title);
setValue("description", description);
setValue("pubDate", new Date().toString());
setValue("guid", Integer.toHexString((title + description).hashCode()));
}
public RSSMessage() {
this.map = new HashMap<String, String>();
this.map.put("guid", Long.toHexString(System.currentTimeMillis()) + ":" + guidcount++);
@ -68,50 +77,62 @@ public class RSSMessage {
}
public String getAuthor() {
return (String) map.get("author");
String s = map.get("author");
if (s == null) return ""; else return s;
}
public String getCopyright() {
return (String) map.get("copyright");
String s = map.get("copyright");
if (s == null) return ""; else return s;
}
public String getCategory() {
return (String) map.get("category");
String s = map.get("category");
if (s == null) return ""; else return s;
}
public String getTitle() {
return (String) map.get("title");
String s = map.get("title");
if (s == null) return ""; else return s;
}
public String getLink() {
return (String) map.get("link");
String s = map.get("link");
if (s == null) return ""; else return s;
}
public String getReferrer() {
return (String) map.get("referrer");
String s = map.get("referrer");
if (s == null) return ""; else return s;
}
public String getLanguage() {
return (String) map.get("language");
String s = map.get("language");
if (s == null) return ""; else return s;
}
public String getDescription() {
return (String) map.get("description");
String s = map.get("description");
if (s == null) return ""; else return s;
}
public String getCreator() {
return (String) map.get("creator");
String s = map.get("creator");
if (s == null) return ""; else return s;
}
public String getPubDate() {
return (String) map.get("pubDate");
String s = map.get("pubDate");
if (s == null) return ""; else return s;
}
public String getGuid() {
return (String) map.get("guid");
String s = map.get("guid");
if (s == null) return ""; else return s;
}
public String getDocs() {
return (String) map.get("docs");
String s = map.get("docs");
if (s == null) return ""; else return s;
}
}

@ -48,6 +48,8 @@ import java.io.IOException;
import de.anomic.server.serverCodings;
import de.anomic.server.logging.serverLog;
import de.anomic.xml.RSSFeed;
import de.anomic.xml.RSSMessage;
public class yacyNewsAction implements yacyPeerAction {
@ -64,6 +66,7 @@ public class yacyNewsAction implements yacyPeerAction {
String decodedString = de.anomic.tools.crypt.simpleDecode(recordString, "");
yacyNewsRecord record = yacyNewsRecord.newRecord(decodedString);
if (record != null) {
RSSFeed.channels("PEERNEWS").addMessage(new RSSMessage("Peer Arrival", peer.getName() + " has joined the network"));
//System.out.println("### news arrival from peer " + peer.getName() + ", decoded=" + decodedString + ", record=" + recordString + ", news=" + record.toString());
String cre1 = (String) serverCodings.string2map(decodedString, ",").get("cre");
String cre2 = (String) serverCodings.string2map(record.toString(), ",").get("cre");
@ -80,6 +83,7 @@ public class yacyNewsAction implements yacyPeerAction {
}
public void processPeerDeparture(yacySeed peer) {
RSSFeed.channels("PEERNEWS").addMessage(new RSSMessage("Peer Departure", peer.getName() + " has left the network"));
}
public void processPeerPing(yacySeed peer) {

Loading…
Cancel
Save