diff --git a/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/Hypervisor.java b/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/Hypervisor.java new file mode 100644 index 0000000..d49c1b0 --- /dev/null +++ b/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/Hypervisor.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2019 louis + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package twitter_techsupportgore_bot; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; + +/** + * Singleton Hypervisor. This is the object that does everything. So we want it + * to be unique. That's why it's a singleton. + * + * @author louis + */ +public class Hypervisor { + + /** + * Private constructor so nobody except this obect can build this object. + */ + private Hypervisor() { + } + + /** + * The singleton. + */ + private static Hypervisor SINGLETON = null; + + /** + * Get the Singleton Hypervisor instance. + * + * @return the instance. + */ + public static Hypervisor getSingleton() { + if (SINGLETON == null) { + SINGLETON = new Hypervisor(); + } + return SINGLETON; + } + + /** + * Save Image from URL. Modified version of the code that can be found atF + * https://www.programcreek.com/2012/12/download-image-from-url-in-java/ + * + * @param imageUrl the image URL. + * @throws IOException + */ + public static void saveImage(String imageUrl) throws IOException { + URL url = new URL(imageUrl); + String fileName = url.getFile(); + String destName = "../downloads" + fileName.substring(fileName.lastIndexOf("/"), fileName.lastIndexOf("?")); + + InputStream is = url.openStream(); + OutputStream os = new FileOutputStream(destName); + + byte[] b = new byte[2048]; + int length; + + while ((length = is.read(b)) != -1) { + os.write(b, 0, length); + } + + is.close(); + os.close(); + } + +} diff --git a/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/Twitter_techsupportgore_bot.java b/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/Twitter_techsupportgore_bot.java index c155a19..2136e1b 100644 --- a/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/Twitter_techsupportgore_bot.java +++ b/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/Twitter_techsupportgore_bot.java @@ -16,18 +16,9 @@ */ package twitter_techsupportgore_bot; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; -import java.net.URL; -import java.util.Collection; -import java.util.TreeMap; import java.util.TreeSet; import twitter_techsupportgore_bot.reddit_handler.*; @@ -38,7 +29,15 @@ import twitter_techsupportgore_bot.reddit_handler.*; */ public class Twitter_techsupportgore_bot { - private static HttpURLConnection con; + /** + * Delay between two scans, in seconds. + */ + private static final int DELAY = 5; + + /** + * Subreddit to extract info from. + */ + private static final String SUBREDDIT = "techsupportgore"; /** * Launch the bot. @@ -51,9 +50,9 @@ public class Twitter_techsupportgore_bot { ProtocolException, IOException { TreeSet postsIndexed = new TreeSet<>(); - RedditExtractor red = new RedditExtractor("techsupportgore"); + RedditExtractor red = new RedditExtractor(SUBREDDIT); for (RedditPost r : red.getRedditPosts()) { - System.out.println(r.getTitle()); + Hypervisor.saveImage(r.getUrl()); } } -} \ No newline at end of file +} diff --git a/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/reddit_handler/RedditExtractor.java b/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/reddit_handler/RedditExtractor.java index 1ddfc24..c82eebb 100644 --- a/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/reddit_handler/RedditExtractor.java +++ b/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/reddit_handler/RedditExtractor.java @@ -132,7 +132,7 @@ public final class RedditExtractor { String id = childData.get("id").toString(); String title = childData.get("title") != null ? childData.get("title").toString() : this.sub.getName(); - title = title.replaceAll("\"", "").replace("\\", "\""); + title = title.replace("\"", "").replace("\\", "\""); String author = childData.get("author") != null ? childData.get("author").toString() : "anonymous"; boolean quarantine = childData.get("quarantine").getAsBoolean(); @@ -146,7 +146,7 @@ public final class RedditExtractor { JsonArray previewImages = new JsonParser().parse(preview.get("images").toString()).getAsJsonArray(); JsonObject source = new JsonParser().parse(previewImages.get(0).toString()).getAsJsonObject(); JsonObject urlSrc = new JsonParser().parse(source.get("source").toString()).getAsJsonObject(); - url = urlSrc.get("url").toString().replace("amp;", ""); + url = urlSrc.get("url").toString().replace("amp;", "").replace("\"", ""); } catch (NullPointerException n) { url = childData.get("url").getAsString(); } diff --git a/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/reddit_handler/RedditPost.java b/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/reddit_handler/RedditPost.java index a5250fa..4a72331 100644 --- a/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/reddit_handler/RedditPost.java +++ b/twitter_techsupportgore_bot/src/twitter_techsupportgore_bot/reddit_handler/RedditPost.java @@ -120,7 +120,7 @@ public abstract class RedditPost { * @return if the URL is correct. */ public boolean hasMediaUrl() { - return !"".equals(url); + return url.contains(".jpg") || url.contains(".png"); } /**