blob: 80b576752ccaaf3548e806114dcc75546eb3a30b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license. See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.replacement.flickr;
import java.io.*;
import java.net.*;
import java.util.regex.*;
import net.java.sip.communicator.service.replacement.*;
import net.java.sip.communicator.util.*;
import org.json.*;
/**
* Implements the {@link ReplacementService} to provide previews for Flickr
* links.
*
* @author Purvesh Sahoo
*/
public class ReplacementServiceFlickrImpl
implements ReplacementService
{
/**
* The logger for this class.
*/
private static final Logger logger =
Logger.getLogger(ReplacementServiceFlickrImpl.class);
/**
* The regex used to match the link in the message.
*/
public static final String FLICKR_PATTERN =
"(?<=>)(https?\\:\\/\\/(www\\.)*?flickr\\.com"
+ "\\/photos\\/[0-9a-zA-Z_\\-\\@]+\\/([0-9]+)(\\/[^\"\\<]*)*)(?=</A>)";
/**
* API Key required to access the Flickr api.
*/
public static final String API_KEY = "8b5d9cee22f0f5154bf4e9846c025484";
/**
* Configuration label shown in the config form.
*/
public static final String FLICKR_CONFIG_LABEL = "Flickr Images";
/**
* Source name; also used as property label.
*/
public static final String SOURCE_NAME = "FLICKR";
/**
* Constructor for <tt>ReplacementServiceFlickrImpl</tt>.
*/
public ReplacementServiceFlickrImpl()
{
logger.trace("Creating a Flickr Source.");
}
/**
* Replaces the Flickr image links with their corresponding thumbnails.
*
* @param sourceString the original flickr image link.
* @return replaced thumbnail image link; the original image link in case of
* no match.
*/
public String getReplacement(String sourceString)
{
final Pattern p =
Pattern.compile(
"\\/photos\\/[0-9a-zA-Z_\\-\\@]+\\/([0-9]+)(\\/[^\"\\<]*)*",
Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(sourceString);
String thumbUrl = sourceString;
while (m.find())
{
try
{
// API URL
String url =
"http://api.flickr.com/services/rest/"
+ "?method=flickr.photos.getInfo&api_key="
+ API_KEY + "&photo_id=" + m.group(1)
+ "&format=json&nojsoncallback=1";
URL flickrURL = new URL(url);
URLConnection conn = flickrURL.openConnection();
BufferedReader in =
new BufferedReader(new InputStreamReader(conn
.getInputStream()));
String inputLine, holder = "";
while ((inputLine = in.readLine()) != null)
holder = inputLine;
in.close();
JSONObject wrapper = new JSONObject(holder);
if (wrapper.getString("stat").equals("ok"))
{
JSONObject result = wrapper.getJSONObject("photo");
if (!(result.length() == 0))
{
String farmID = result.getString("farm");
String serverID = result.getString("server");
String secret = result.getString("secret");
thumbUrl =
"http://farm" + farmID + ".static.flickr.com/"
+ serverID + "/" + m.group(1) + "_" + secret
+ "_t.jpg";
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
return thumbUrl;
}
/**
* Returns the source name
*
* @return the source name
*/
public String getSourceName()
{
return SOURCE_NAME;
}
/**
* Returns the pattern of the source
*
* @return the source pattern
*/
public String getPattern()
{
return FLICKR_PATTERN;
}
}
|