1 /* 2 * Copyright 1999,2004 The Apache Software Foundation. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.apache.commons.feedparser.locate.blogservice; 18 19 import org.apache.commons.feedparser.FeedParserException; 20 import org.apache.commons.feedparser.locate.*; 21 22 /** 23 * Models the Flickr image blog service, encapsulating whether a given weblog 24 * is this type of service and where it usually keeps its feeds. 25 * 26 * @author Brad Neuberg, bkn3@columbia.edu 27 */ 28 public class Flickr extends BlogService { 29 30 /** Returns whether we can trust the results of this blog service's 31 * autodiscovery links. For example, TextAmerica returns invalid 32 * autodiscovery results. 33 */ 34 public boolean hasValidAutoDiscovery() { 35 return true; 36 } 37 38 /** Returns whether we should follow HTTP redirects for this blog service. 39 * Some services don't implement HTTP redirects correctly, while others, 40 * like Xanga, require it. 41 */ 42 public boolean followRedirects() { 43 return false; 44 } 45 46 /** Determines if the weblog at the given resource and with the given 47 * content is this blog service. 48 * @param resource A full URI to this resource, such as 49 * "http://www.codinginparadise.org". 50 * @param content The full HTML content at the resource's URL. 51 * @throws FeedParserException Thrown if an error occurs while 52 * determining the type of this weblog. 53 */ 54 public boolean isThisService(String resource, String content) 55 throws FeedParserException { 56 return resource.indexOf( "flickr.com" ) != -1; 57 } 58 59 /** 60 * Returns an array of FeedReferences that contains information on the 61 * usual locations this blog service contains its feed. The feeds should 62 * be ordered by quality, so that higher quality feeds come before lower 63 * quality ones (i.e. you would want to have an Atom FeedReference 64 * object come before an RSS 0.91 FeedReference object in this list). 65 * @param resource A URL to the given weblog that might be used to build 66 * up where feeds are usually located. 67 * @param content The full content of the resource URL, which might 68 * be useful to determine where feeds are usually located. This can be 69 * null. 70 * @throws FeedParserException Thrown if an error occurs while trying 71 * to determine the usual locations of feeds for this service. 72 */ 73 public FeedReference[] getFeedLocations(String resource, 74 String content) 75 throws FeedParserException { 76 resource = getBaseFeedPath(resource); 77 // * Input: http://flickr.com/photos/tags/cats/ 78 // * 79 // * Output: http://flickr.com/services/feeds/photos_public.gne?tags=cats&format=atom_03 80 81 if ( resource == null ) 82 return new FeedReference[0]; 83 84 int begin = resource.indexOf( "/tags/" ); 85 86 //we can't continue here. 87 if ( begin == -1 ) 88 return new FeedReference[0]; 89 90 begin += 6; 91 92 int end = resource.lastIndexOf( "/" ); 93 if ( end == -1 || end < begin ) 94 end = resource.length(); 95 96 String tag = resource.substring( begin, end ); 97 98 String location = "http://flickr.com/services/feeds/photos_public.gne?tags=" + 99 tag + 100 "&format=atom_03"; 101 102 FeedReference flickrLocations[] = 103 { new FeedReference(location, 104 FeedReference.ATOM_MEDIA_TYPE) }; 105 106 return flickrLocations; 107 } 108 }