From acc46fc3497a66a427b795b4a22c6e71d69185a1 Mon Sep 17 00:00:00 2001
From: Walter Purcaro <vuolter@gmail.com>
Date: Sat, 13 Dec 2014 15:56:57 +0100
Subject: Update

---
 pyload/plugin/captcha/AdYouLike.py | 107 +++++++++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 pyload/plugin/captcha/AdYouLike.py

(limited to 'pyload/plugin/captcha/AdYouLike.py')

diff --git a/pyload/plugin/captcha/AdYouLike.py b/pyload/plugin/captcha/AdYouLike.py
new file mode 100644
index 000000000..9c32d0569
--- /dev/null
+++ b/pyload/plugin/captcha/AdYouLike.py
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugin.Captcha import Captcha
+from pyload.utils import json_loads
+
+
+class AdYouLike(Captcha):
+    __name    = "AdYouLike"
+    __type    = "captcha"
+    __version = "0.02"
+
+    __description = """AdYouLike captcha service plugin"""
+    __license     = "GPLv3"
+    __authors     = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+    AYL_PATTERN      = r'Adyoulike\.create\s*\((.+?)\)'
+    CALLBACK_PATTERN = r'(Adyoulike\.g\._jsonp_\d+)'
+
+
+    def detect_key(self, html=None):
+        if not html:
+            if hasattr(self.plugin, "html") and self.plugin.html:
+                html = self.plugin.html
+            else:
+                errmsg = _("AdYouLike html not found")
+                self.plugin.fail(errmsg)
+                raise TypeError(errmsg)
+
+        m = re.search(self.AYL_PATTERN, html)
+        n = re.search(self.CALLBACK_PATTERN, html)
+        if m and n:
+            self.key = (m.group(1).strip(), n.group(1).strip())
+            self.plugin.logDebug("AdYouLike ayl|callback: %s | %s" % self.key)
+            return self.key   #: key is the tuple(ayl, callback)
+        else:
+            self.plugin.logDebug("AdYouLike ayl or callback not found")
+            return None
+
+
+    def challenge(self, key=None):
+        if not key:
+            if self.detect_key():
+                key = self.key
+            else:
+                errmsg = _("AdYouLike key not found")
+                self.plugin.fail(errmsg)
+                raise TypeError(errmsg)
+
+        ayl, callback = key
+
+        # {"adyoulike":{"key":"P~zQ~O0zV0WTiAzC-iw0navWQpCLoYEP"},
+        # "all":{"element_id":"ayl_private_cap_92300","lang":"fr","env":"prod"}}
+        ayl = json_loads(ayl)
+
+        html = self.plugin.req.load("http://api-ayl.appspot.com/challenge",
+                                    get={'key'     : ayl['adyoulike']['key'],
+                                         'env'     : ayl['all']['env'],
+                                         'callback': callback})
+        try:
+            challenge = json_loads(re.search(callback + r'\s*\((.+?)\)', html).group(1))
+        except Exception:
+            errmsg = _("AdYouLike challenge pattern not found")
+            self.plugin.error(errmsg)
+            raise ValueError(errmsg)
+
+        self.plugin.logDebug("AdYouLike challenge: %s" % challenge)
+
+        return self.result(ayl, challenge)
+
+
+    def result(self, server, challenge):
+        # Adyoulike.g._jsonp_5579316662423138
+        # ({"translations":{"fr":{"instructions_visual":"Recopiez « Soonnight » ci-dessous :"}},
+        # "site_under":true,"clickable":true,"pixels":{"VIDEO_050":[],"DISPLAY":[],"VIDEO_000":[],"VIDEO_100":[],
+        # "VIDEO_025":[],"VIDEO_075":[]},"medium_type":"image/adyoulike",
+        # "iframes":{"big":"<iframe src=\"http://www.soonnight.com/campagn.html\" scrolling=\"no\"
+        # height=\"250\" width=\"300\" frameborder=\"0\"></iframe>"},"shares":{},"id":256,
+        # "token":"e6QuI4aRSnbIZJg02IsV6cp4JQ9~MjA1","formats":{"small":{"y":300,"x":0,"w":300,"h":60},
+        # "big":{"y":0,"x":0,"w":300,"h":250},"hover":{"y":440,"x":0,"w":300,"h":60}},
+        # "tid":"SqwuAdxT1EZoi4B5q0T63LN2AkiCJBg5"})
+
+        if isinstance(server, basestring):
+            server = json_loads(server)
+
+        if isinstance(challenge, basestring):
+            challenge = json_loads(challenge)
+
+        try:
+            instructions_visual = challenge['translations'][server['all']['lang']]['instructions_visual']
+            result = re.search(u'«(.+?)»', instructions_visual).group(1).strip()
+        except Exception:
+            errmsg = _("AdYouLike result not found")
+            self.plugin.error(errmsg)
+            raise ValueError(errmsg)
+
+        result = {'_ayl_captcha_engine' : "adyoulike",
+                  '_ayl_env'            : server['all']['env'],
+                  '_ayl_tid'            : challenge['tid'],
+                  '_ayl_token_challenge': challenge['token'],
+                  '_ayl_response'       : response}
+
+        self.plugin.logDebug("AdYouLike result: %s" % result)
+
+        return result
-- 
cgit v1.2.3