001 /* 002 * Copyright 1999,2004 The Apache Software Foundation. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.apache.commons.feedparser.locate.blogservice; 018 019 import org.apache.commons.feedparser.FeedParserException; 020 import org.apache.commons.feedparser.locate.*; 021 022 /** 023 * Models the Yahoo Groups service, encapsulating whether a given weblog 024 * is this type of service and where it usually keeps its feeds. 025 * 026 * @author Brad Neuberg, bkn3@columbia.edu 027 */ 028 public class YahooGroups extends BlogService { 029 030 /** Returns whether we can trust the results of this blog service's 031 * autodiscovery links. For example, TextAmerica returns invalid 032 * autodiscovery results. 033 */ 034 public boolean hasValidAutoDiscovery() { 035 return false; 036 } 037 038 /** Returns whether we should follow HTTP redirects for this blog service. 039 * Some services don't implement HTTP redirects correctly, while others, 040 * like Xanga, require it. 041 */ 042 public boolean followRedirects() { 043 return false; 044 } 045 046 /** Determines if the weblog at the given resource and with the given 047 * content is this blog service. 048 * @param resource A full URI to this resource, such as 049 * "http://www.codinginparadise.org". 050 * @param content The full HTML content at the resource's URL. 051 * @throws FeedParserException Thrown if an error occurs while 052 * determining the type of this weblog. 053 */ 054 public boolean isThisService(String resource, String content) 055 throws FeedParserException { 056 boolean results = false; 057 058 results = containsDomain( resource, "groups.yahoo.com" ); 059 060 return results; 061 } 062 063 /** 064 * Returns an array of FeedReferences that contains information on the 065 * usual locations this blog service contains its feed. The feeds should 066 * be ordered by quality, so that higher quality feeds come before lower 067 * quality ones (i.e. you would want to have an Atom FeedReference 068 * object come before an RSS 0.91 FeedReference object in this list). 069 * @param resource A URL to the given weblog that might be used to build 070 * up where feeds are usually located. 071 * @param content The full content of the resource URL, which might 072 * be useful to determine where feeds are usually located. This can be 073 * null. 074 * @throws FeedParserException Thrown if an error occurs while trying 075 * to determine the usual locations of feeds for this service. 076 */ 077 public FeedReference[] getFeedLocations(String resource, 078 String content) 079 throws FeedParserException { 080 System.out.println("getFeedLocations="+resource); 081 // * Input: http://groups.yahoo.com/group/aggregators/ 082 // * 083 // * Output: http://rss.groups.yahoo.com/group/aggregators/rss 084 String location; 085 086 if ( resource == null ) 087 return new FeedReference[0]; 088 089 if ( resource.indexOf( "/group/" ) == -1 || 090 resource.indexOf( "groups.yahoo.com" ) == -1 ) 091 return new FeedReference[0]; 092 093 location = "http://rss." + 094 resource.substring( "http://".length(), resource.length() ) 095 ; 096 097 if ( location.endsWith( "/" ) ) { 098 location += "rss"; 099 } else { 100 location += "/rss"; 101 } 102 103 FeedReference yahooGroupsLocations[] = 104 { new FeedReference(location, 105 FeedReference.RSS_MEDIA_TYPE) }; 106 107 return yahooGroupsLocations; 108 } 109 }