Skip to content

Commit f78fec2

Browse files
author
Darren Greaves
committed
Merge pull request boncey#119 from nobbes/master
FlickrCrawler added
2 parents 95cf9f8 + 41b2b58 commit f78fec2

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package com.company;
2+
3+
import com.flickr4java.flickr.Flickr;
4+
import com.flickr4java.flickr.FlickrException;
5+
import com.flickr4java.flickr.REST;
6+
import com.flickr4java.flickr.photos.Photo;
7+
import com.flickr4java.flickr.photos.PhotoList;
8+
import com.flickr4java.flickr.photos.SearchParameters;
9+
10+
import javax.imageio.ImageIO;
11+
import java.io.File;
12+
import java.io.IOException;
13+
import java.util.Iterator;
14+
import java.util.prefs.Preferences;
15+
import java.util.regex.Matcher;
16+
import java.util.regex.Pattern;
17+
18+
/*
19+
* - Java 7 is needed
20+
* - insert your api- and secretkey
21+
*
22+
* start main with wanted tags as parameter, for example: FlickrCrawler.main(Sunset) and all pics will be saved in original size or large to pics\sunset\...
23+
*/
24+
public class FlickrCrawler {
25+
26+
private static String path = "";
27+
private static Preferences userPrefs = Preferences.userNodeForPackage(FlickrCrawler.class);
28+
29+
// convert filename to clean filename
30+
public static String convertToFileSystemChar(String name) {
31+
String erg = "";
32+
Matcher m = Pattern.compile("[a-z0-9 _#&@\\[\\(\\)\\]\\-\\.]", Pattern.CASE_INSENSITIVE).matcher(name);
33+
while (m.find()) {
34+
erg += name.substring(m.start(), m.end());
35+
}
36+
if (erg.length() > 200) {
37+
erg = erg.substring(0, 200);
38+
System.out.println("cut filename: " + erg);
39+
}
40+
return erg;
41+
}
42+
43+
public static boolean saveImage(Flickr f, Photo p) {
44+
45+
String cleanTitle = convertToFileSystemChar(p.getTitle());
46+
47+
File orgFile = new File(path + File.separator + cleanTitle + "_" + p.getId() + "_o." + p.getOriginalFormat());
48+
File largeFile = new File(path + File.separator + cleanTitle + "_" + p.getId() + "_b." + p.getOriginalFormat());
49+
50+
if (orgFile.exists() || largeFile.exists()) {
51+
System.out.println(p.getTitle() + "\t" + p.getLargeUrl() + " skipped!");
52+
return false;
53+
}
54+
55+
try {
56+
Photo nfo = f.getPhotosInterface().getInfo(p.getId(), null);
57+
if (nfo.getOriginalSecret().isEmpty()) {
58+
ImageIO.write(p.getLargeImage(), p.getOriginalFormat(), largeFile);
59+
System.out.println(p.getTitle() + "\t" + p.getLargeUrl() + " was written to " + largeFile.getName());
60+
} else {
61+
p.setOriginalSecret(nfo.getOriginalSecret());
62+
ImageIO.write(p.getOriginalImage(), p.getOriginalFormat(), orgFile);
63+
System.out.println(p.getTitle() + "\t" + p.getOriginalUrl() + " was written to " + orgFile.getName());
64+
}
65+
} catch (FlickrException e) {
66+
e.printStackTrace();
67+
} catch (IOException e) {
68+
e.printStackTrace();
69+
}
70+
return true;
71+
}
72+
73+
public static void main(String[] args) {
74+
if (args.length == 0) {
75+
System.out.println("Parameter are needed as for searching. Example: FlickrCrawler.java sunset");
76+
return;
77+
}
78+
79+
String apikey = "apikey";
80+
String secret = "secret";
81+
82+
Flickr flickr = new Flickr(apikey, secret, new REST());
83+
SearchParameters searchParameters = new SearchParameters();
84+
searchParameters.setAccuracy(1);
85+
86+
StringBuilder tagsBuilder = new StringBuilder();
87+
for (String tmp : args) {
88+
tagsBuilder.append(" " + tmp);
89+
}
90+
path = "pics" + File.separator + tagsBuilder.toString().substring(1);
91+
92+
new File(path).mkdirs();
93+
searchParameters.setTags(args);
94+
95+
for (int i = userPrefs.getInt(path, 0); true; i++) {
96+
userPrefs.putInt( path, i );
97+
System.out.println("\tcurrent page: " + userPrefs.getInt(path, 0));
98+
try {
99+
PhotoList<Photo> list = flickr.getPhotosInterface().search(searchParameters, 500, i);
100+
if (list.isEmpty())
101+
break;
102+
103+
Iterator itr = list.iterator();
104+
while (itr.hasNext()) {
105+
saveImage(flickr, (Photo) itr.next());
106+
}
107+
} catch (FlickrException e) {
108+
e.printStackTrace();
109+
}
110+
}
111+
}
112+
}

0 commit comments

Comments
 (0)