# -*- coding: utf-8 -*-

import requests
from base62 import Base62
import json
import re

class Url() :

    server = "http://10.128.0.20/"

    def url2dic(self, links):
        data = []

        if (True):
            for link in links:

                link = link.replace('\n'," ").replace('\r'," ").replace('\'',"")

                print link

                if len(link) < 5:
                    continue

                if self.isdeep(link) :

                    data.append({
                         'bitly_url' : "",
                         'origin_url': str(link),
                         'bitly_click': "0",
                         'piki_cid' : str(self.Url2Cid(link)),
                         'rpiki_click' : "0"
                    })

                elif self.isrpiki(link) :
                    print link
                    data.append({
                         'bitly_url' : "",
                         'origin_url': str(link),
                         'bitly_click': "0",
                         'piki_cid' : str(self.Url2Cid(link)),
                         'rpiki_click' : str(self.rpiki2click(link))
                    })

                elif self.isbitly(link):
                    try:
                        link = "http://bit.ly/" + re.compile('[^./a-zA-Z0-9]+').sub("",link.split("//bit.ly/")[1].split(" ")[0])

                        link_meta = link + "+"
                        txt = requests.get(link_meta).text

                        source_tag_op = "\"long_url\": \""
                        source_tag_cl = "\""

                        clicks_tag_op = "\"user_clicks\": "
                        clicks_tag_cl = ","

                        source_bgn = txt.find(source_tag_op) + len(source_tag_op)
                        source_end = source_bgn + txt[source_bgn:(source_bgn + 500)].find(source_tag_cl)
                        clicks_bgn = txt.find(clicks_tag_op) + len(clicks_tag_op)
                        clicks_end = clicks_bgn + txt[clicks_bgn:(clicks_bgn + 50)].find(clicks_tag_cl)

                    except:
                        data.append({'bitly_url' : "",'origin_url': "",'bitly_click': "0",'piki_cid' : "0",'rpiki_click' : "0"})

                    try:
                        piki_url = str(txt[source_bgn:source_end]).split("cid=")[1].split("&")[0]
                    except:
                        piki_url = str(0)

                    print self.rpiki2click(txt[source_bgn:source_end])

                    if self.isrpiki(txt[source_bgn:source_end]) :
                        data.append({
                         'bitly_url' : str(link),
                         'origin_url': str(txt[source_bgn:source_end]),
                         'bitly_click': str(txt[clicks_bgn:clicks_end]),
                         'piki_cid' : str(Base62().decode(piki_url)),
                         'rpiki_click' : str(self.rpiki2click(txt[source_bgn:source_end]))
                        })

                    else:
                        #print link
                        data.append({
                         'bitly_url' : str(link),
                         'origin_url': str(txt[source_bgn:source_end]),
                         'bitly_click': str(txt[clicks_bgn:clicks_end]),
                         'piki_cid' : str(Base62().decode(piki_url)),
                         'rpiki_click' : "0"
                        })

        if len(data) == 0:
            data.append({'bitly_url' : "",'origin_url': "",'bitly_click': "0",'piki_cid' : "0",'rpiki_click' : "0"})

        return data



    def Url2Cid(self,url):

        try:
            if self.isrpiki(url):
                return Base62().decode(url.split("cid=")[1].split("&")[0])
            elif self.isdeep(url):
                return requests.get(url).text.split("http://www.pikicast.com/share/")[1].split('"')[0]
        except :
            return "0"

    def rpiki2click(self,url):
        print url
        api = self.server + "contents_RPIKI_api/"

        try:
            fr = url.split("fr=")[1].split("&")[0]
        except:
            fr = ""
        try:
            cid = url.split("cid=")[1].split("&")[0]
        except:
            cid = ""
        try:
            m = url.split("m=")[1].split("&")[0]
        except:
            m = ""
        try:
            c = url.split("c=")[1].split("&")[0]
        except:
            c =""
        try:
            v = url.split("v=")[1].split("&")[0]
        except:
            v = ""
        try:
            t = url.split("t=")[1].split("&")[0]
        except:
            t = ""

        try:
            data = json.loads(requests.get(api + cid + '_' + fr + '_' + m + '_' + c + '_' + v + '_' + t).text)

            ret = data['data']['real']
            if ret == "":
                ret = "0"
        except Exception as e:
            print e
            ret = "0"

        return ret

    def getText2bitly(self,text):
        try:
            return "http://bit.ly/" + text.split("http://bit.ly/")[1].split(" ")[0]
        except:
            return ""

    def isdeep(self, url):

        if url.find("//fb.me/") > 0 :
            return True
        else:
            return False

    def isrpiki(self, url):
        if url.find("//r.pikicast.com/") > 0 :
            return True
        else:
            return False

    def isbitly(self, url):

        if url.find("//bit.ly/") > 0 :
            return True
        else:
            return False

