Add support for 7sur7.be
[gofetch.git] / src / be / nikiroo / gofetch / support / SeptSurSept.java
diff --git a/src/be/nikiroo/gofetch/support/SeptSurSept.java b/src/be/nikiroo/gofetch/support/SeptSurSept.java
new file mode 100644 (file)
index 0000000..6134f57
--- /dev/null
@@ -0,0 +1,232 @@
+package be.nikiroo.gofetch.support;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map.Entry;
+
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.nodes.Node;
+
+/**
+ * Support <a href="https://www.7sur7.be/">https://www.7sur7.be/</a>.
+ * 
+ * @author niki
+ */
+public class SeptSurSept extends BasicSupport {
+       @Override
+       public String getDescription() {
+               return "7SUR7.be Info, sport et showbiz, 24/24, 7/7";
+       }
+
+       @Override
+       public void login() throws IOException {
+               addCookie("pwrefr2", "");
+               addCookie("pwv-atXMVFeyFP1Ki09i", "1");
+               addCookie("pwg-atXMVFeyFP1Ki09i", "basic");
+
+               addCookie("pwv", "1");
+               addCookie("pw", "functional");
+
+               URL url = new URL("https://www.7sur7.be/7s7/privacy/callback.do"
+                               + "?redirectUri=/" + "&pwv=1" + "&pws=functional%7Canalytics"
+                               + "&days=3650" + "&referrer=");
+
+               open(url).close();
+       }
+
+       @Override
+       protected List<Entry<URL, String>> getUrls() throws IOException {
+               List<Entry<URL, String>> urls = new ArrayList<Entry<URL, String>>();
+               URL url = new URL("https://www.7sur7.be/");
+               urls.add(new AbstractMap.SimpleEntry<URL, String>(url, ""));
+
+               return urls;
+       }
+
+       @Override
+       protected List<Element> getArticles(Document doc) {
+               return doc.getElementsByClass("clip");
+       }
+
+       @Override
+       protected String getArticleId(Document doc, Element article) {
+               String id = article.attr("id");
+               if (id != null && id.startsWith("clip")) {
+                       return id.substring("clip".length());
+               }
+
+               return null;
+       }
+
+       @Override
+       protected String getArticleTitle(Document doc, Element article) {
+               return article.attr("data-title");
+       }
+
+       @Override
+       protected String getArticleAuthor(Document doc, Element article) {
+               return "";
+       }
+
+       @Override
+       protected String getArticleDate(Document doc, Element article) {
+               return article.attr("data-date");
+       }
+
+       @Override
+       protected String getArticleCategory(Document doc, Element article,
+                       String currentCategory) {
+               Element parent = article.parent();
+               if (parent != null) {
+                       Element catElement = parent.previousElementSibling();
+                       if (catElement != null) {
+                               return catElement.text();
+                       }
+               }
+
+               return "";
+       }
+
+       @Override
+       protected String getArticleDetails(Document doc, Element article) {
+               return "";
+       }
+
+       @Override
+       protected String getArticleIntUrl(Document doc, Element article) {
+               return article.absUrl("href");
+       }
+
+       @Override
+       protected String getArticleExtUrl(Document doc, Element article) {
+               return "";
+       }
+
+       @Override
+       protected String getArticleContent(Document doc, Element article) {
+               return article.attr("data-intro").trim();
+       }
+
+       @Override
+       protected Element getFullArticle(Document doc) {
+               return doc.getElementById("detail_content");
+       }
+
+       @Override
+       protected List<Element> getFullArticleCommentPosts(Document doc, URL intUrl) {
+               return getSubCommentElements(doc.getElementsByClass("comment-list")
+                               .first());
+       }
+
+       @Override
+       protected ElementProcessor getElementProcessorFullArticle() {
+               return new BasicElementProcessor() {
+                       @Override
+                       public boolean ignoreNode(Node node) {
+                               return node.attr("class").contains("chapo");
+                       }
+
+                       @Override
+                       public String isSubtitle(Node node) {
+                               if (node instanceof Element) {
+                                       Element element = (Element) node;
+                                       if (element.tagName().startsWith("h")
+                                                       && element.tagName().length() == 2) {
+                                               return element.text();
+                                       }
+                               }
+                               return null;
+                       }
+               };
+       }
+
+       @Override
+       protected List<Element> getCommentCommentPosts(Document doc,
+                       Element container) {
+               return getSubCommentElements(container.getElementsByClass("children")
+                               .first());
+       }
+
+       @Override
+       protected String getCommentId(Element post) {
+               Element idE = post.getElementsByTag("a").first();
+               if (idE != null) {
+                       return idE.attr("id");
+               }
+
+               return "";
+       }
+
+       @Override
+       protected String getCommentAuthor(Element post) {
+               // Since we have no title, we switch with author
+               return "";
+       }
+
+       @Override
+       protected String getCommentTitle(Element post) {
+               // Since we have no title, we switch with author
+               Element authorE = post.getElementsByTag("footer").first();
+               if (authorE != null) {
+                       authorE = authorE.getElementsByTag("cite").first();
+               }
+               if (authorE != null) {
+                       return authorE.text();
+               }
+
+               return "";
+       }
+
+       @Override
+       protected String getCommentDate(Element post) {
+               Element idE = post.getElementsByTag("a").first();
+               if (idE != null) {
+                       Element dateE = idE.getElementsByTag("span").first();
+                       if (dateE != null) {
+                               return dateE.attr("data-epoch");
+                       }
+               }
+
+               return "";
+       }
+
+       @Override
+       protected Element getCommentContentElement(Element post) {
+               Element contentE = post.getElementsByClass("comment-content").first();
+               return contentE;
+       }
+
+       @Override
+       protected ElementProcessor getElementProcessorComment() {
+               return new BasicElementProcessor() {
+                       @Override
+                       public boolean ignoreNode(Node node) {
+                               if (node instanceof Element) {
+                                       Element el = (Element) node;
+                                       if ("h4".equals(el.tagName())) {
+                                               return true;
+                                       }
+                               }
+
+                               return false;
+                       }
+               };
+       }
+
+       private List<Element> getSubCommentElements(Element posts) {
+               List<Element> commentElements = new ArrayList<Element>();
+               if (posts != null) {
+                       for (Element possibleCommentElement : posts.children()) {
+                               if (possibleCommentElement.hasClass("comment")) {
+                                       commentElements.add(possibleCommentElement);
+                               }
+                       }
+               }
+
+               return commentElements;
+       }
+}