diff options
-rw-r--r-- | difference.cpp | 127 |
1 files changed, 53 insertions, 74 deletions
diff --git a/difference.cpp b/difference.cpp index 6444efd..3d3bb18 100644 --- a/difference.cpp +++ b/difference.cpp | |||
@@ -36,6 +36,53 @@ std::string capitalize(std::string input) | |||
36 | return result; | 36 | return result; |
37 | } | 37 | } |
38 | 38 | ||
39 | bool downloadImage(std::string url, curl::curl_header headers, Magick::Blob& img, Magick::Image& pic) | ||
40 | { | ||
41 | // willyfogg.com is a thumbnail generator known to return 200 even if the target image no longer exists | ||
42 | if (url.find("willyfogg.com/thumb.php") != std::string::npos) | ||
43 | { | ||
44 | return false; | ||
45 | } | ||
46 | |||
47 | std::ostringstream imgbuf; | ||
48 | curl::curl_ios<std::ostringstream> imgios(imgbuf); | ||
49 | curl::curl_easy imghandle(imgios); | ||
50 | |||
51 | imghandle.add<CURLOPT_HTTPHEADER>(headers.get()); | ||
52 | imghandle.add<CURLOPT_URL>(url.c_str()); | ||
53 | imghandle.add<CURLOPT_CONNECTTIMEOUT>(30); | ||
54 | |||
55 | try { | ||
56 | imghandle.perform(); | ||
57 | } catch (curl::curl_easy_exception error) { | ||
58 | error.print_traceback(); | ||
59 | |||
60 | return false; | ||
61 | } | ||
62 | |||
63 | if (imghandle.get_info<CURLINFO_RESPONSE_CODE>().get() != 200) | ||
64 | { | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | if (std::string(imghandle.get_info<CURLINFO_CONTENT_TYPE>().get()).substr(0, 6) != "image/") | ||
69 | { | ||
70 | return false; | ||
71 | } | ||
72 | |||
73 | std::string imgstr = imgbuf.str(); | ||
74 | img = Magick::Blob(imgstr.c_str(), imgstr.length()); | ||
75 | pic.read(img); | ||
76 | if (pic.rows() == 0) | ||
77 | { | ||
78 | return false; | ||
79 | } | ||
80 | |||
81 | std::cout << url << std::endl; | ||
82 | |||
83 | return true; | ||
84 | } | ||
85 | |||
39 | int main(int argc, char** argv) | 86 | int main(int argc, char** argv) |
40 | { | 87 | { |
41 | srand(time(NULL)); | 88 | srand(time(NULL)); |
@@ -154,45 +201,11 @@ int main(int argc, char** argv) | |||
154 | int curind = 0; | 201 | int curind = 0; |
155 | for (; curind < lstvec.size(); curind++) | 202 | for (; curind < lstvec.size(); curind++) |
156 | { | 203 | { |
157 | std::ostringstream img1buf; | 204 | if (downloadImage(lstvec[curind], headers, img1, pic1)) |
158 | curl::curl_ios<std::ostringstream> img1ios(img1buf); | ||
159 | curl::curl_easy img1handle(img1ios); | ||
160 | std::string img1url = lstvec[curind]; | ||
161 | |||
162 | img1handle.add<CURLOPT_HTTPHEADER>(headers.get()); | ||
163 | img1handle.add<CURLOPT_URL>(img1url.c_str()); | ||
164 | img1handle.add<CURLOPT_CONNECTTIMEOUT>(30); | ||
165 | |||
166 | try { | ||
167 | img1handle.perform(); | ||
168 | } catch (curl::curl_easy_exception error) { | ||
169 | error.print_traceback(); | ||
170 | |||
171 | continue; | ||
172 | } | ||
173 | |||
174 | if (img1handle.get_info<CURLINFO_RESPONSE_CODE>().get() != 200) | ||
175 | { | 205 | { |
176 | continue; | 206 | success = true; |
207 | break; | ||
177 | } | 208 | } |
178 | |||
179 | if (std::string(img1handle.get_info<CURLINFO_CONTENT_TYPE>().get()).substr(0, 6) != "image/") | ||
180 | { | ||
181 | continue; | ||
182 | } | ||
183 | |||
184 | std::string img1str = img1buf.str(); | ||
185 | img1 = Magick::Blob(img1str.c_str(), img1str.length()); | ||
186 | pic1.read(img1); | ||
187 | if (pic1.rows() == 0) | ||
188 | { | ||
189 | continue; | ||
190 | } | ||
191 | |||
192 | std::cout << img1url << std::endl; | ||
193 | success = true; | ||
194 | |||
195 | break; | ||
196 | } | 209 | } |
197 | 210 | ||
198 | if (!success) | 211 | if (!success) |
@@ -205,45 +218,11 @@ int main(int argc, char** argv) | |||
205 | Magick::Image pic2; | 218 | Magick::Image pic2; |
206 | for (curind++; curind < lstvec.size(); curind++) | 219 | for (curind++; curind < lstvec.size(); curind++) |
207 | { | 220 | { |
208 | std::ostringstream img2buf; | 221 | if (downloadImage(lstvec[curind], headers, img2, pic2)) |
209 | curl::curl_ios<std::ostringstream> img2ios(img2buf); | ||
210 | curl::curl_easy img2handle(img2ios); | ||
211 | std::string img2url = lstvec[curind]; | ||
212 | |||
213 | img2handle.add<CURLOPT_HTTPHEADER>(headers.get()); | ||
214 | img2handle.add<CURLOPT_URL>(img2url.c_str()); | ||
215 | img2handle.add<CURLOPT_CONNECTTIMEOUT>(30); | ||
216 | |||
217 | try { | ||
218 | img2handle.perform(); | ||
219 | } catch (curl::curl_easy_exception error) { | ||
220 | error.print_traceback(); | ||
221 | |||
222 | continue; | ||
223 | } | ||
224 | |||
225 | if (img2handle.get_info<CURLINFO_RESPONSE_CODE>().get() != 200) | ||
226 | { | ||
227 | continue; | ||
228 | } | ||
229 | |||
230 | if (std::string(img2handle.get_info<CURLINFO_CONTENT_TYPE>().get()).substr(0, 6) != "image/") | ||
231 | { | ||
232 | continue; | ||
233 | } | ||
234 | |||
235 | std::string img2str = img2buf.str(); | ||
236 | img2 = Magick::Blob(img2str.c_str(), img2str.length()); | ||
237 | pic2.read(img2); | ||
238 | if (pic2.rows() == 0) | ||
239 | { | 222 | { |
240 | continue; | 223 | success = true; |
224 | break; | ||
241 | } | 225 | } |
242 | |||
243 | std::cout << img2url << std::endl; | ||
244 | success = true; | ||
245 | |||
246 | break; | ||
247 | } | 226 | } |
248 | 227 | ||
249 | if (!success) | 228 | if (!success) |