# -*- coding: utf-8 -*-
import requests
from base62 import Base62
import json
import re
class Url() :
def url2dic(self, links):
data = []
if (True):
for link in links:
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) :
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\u3131-\u3163\uac00-\ud7a3]+').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)
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):
if self.isrpiki(url):
return Base62().decode(url.split("cid=")[1].split("&")[0])
elif self.isdeep(url):
try:
return requests.get(url).text.split("http://www.pikicast.com/share/")[1].split('"')[0]
except :
return "0"
def rpiki2click(self,url):
#print url
api = "http://data2.piki.work/contents_RPIKI_api/"
try:
cid = url.split("cid=")[1].split("&")[0]
fr = url.split("fr=")[1].split("&")[0]
m = url.split("m=")[1].split("&")[0]
c = url.split("c=")[1].split("&")[0]
v = url.split("v=")[1].split("&")[0]
t = url.split("t=")[1].split("&")[0]
data = json.loads(requests.get(api + cid + '_' + fr + '_' + m + '_' + c + '_' + v + '_' + t).text)
ret = data['data']['real']
if ret == "":
ret = "0"
except:
ret = "0"
return ret
def getText2bitly(self,text):
return "http://bit.ly/" + text.split("http://bit.ly/")[1].split(" ")[0]
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