Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 13448|Odgovoriti: 5

Kako znanstveno prijeti rdeče kuverte: Ob koncu leta lahko obogatite in napišete program za pridobivanje rdečih kuvert

[Kopiraj povezavo]
Objavljeno na 13. 02. 2015 22:44:10 | | | |
0×00 Ozadje

Kakšne so rdeče kuverte? Bratov sin Huer je dejal: "Denar je skoraj primerljiv. Brat in hči Dao Yun sta rekla: "Ni tako dobro kot moja teta zaradi vetra." "Vsi razumejo ozadje, novo leto je in dan, ko rdeče kuverte letijo po nebu. Ravno zgodilo se je, da sem se pred dvema dnevoma naučil Python in bil bolj navdušen, zato sem preučeval in preučeval plazenje po rdečih kuvertah Weibo, zakaj rdeče kuverte Weibo namesto rdečih Alipay, ker razumem samo splet, in če bom imel energijo, bom morda v prihodnosti študiral tudi algoritem 'udari krtko'.
Ker sem začetnik v Pythonu, je ta program tudi tretji program, ki sem ga napisal po učenju Pythona, zato prosim, ne sprašujte se osebno, če je v kodi kakšna praznina, poudarek je na ideji, no, če je v ideji kakšna pomanjkljivost, prosim, ne izzivajte je osebno, vidite, IE ima obraz, da se sam postavi kot privzeti brskalnik, tudi če napišem 'scum article', je sprejemljivo......
Uporabljam Python 2.7 in pravijo, da je velika razlika med Pythonom 2 in Pythonom 3.
0×01 Ideje
Bil sem prelen, da bi to opisal z besedami, zato sem narisal skico, in vsi bi jo morali razumeti.
Najprej, staro pravilo, najprej uvedi knjižnico, za katero ne veš, da je uporabna, a je ne moreš brez nje:
[mw_shl_code=java,true]import re import urllib import urllib2 import cookielib import base64 import binascii import os import json import sys import cPickle as p import rsa[/mw_shl_code] Nato deklarirajte še nekaj drugih spremenljivk, ki jih boste morali uporabiti kasneje:

[mw_shl_code=java,true]reload(sys)sys.setdefaultencoding('utf-8&') #将字符编码置为utf-8luckyList=[] #红包列表lowest=10 #能忍受红包领奖记录最低为多少[/mw_shl_code]Tukaj se uporablja rsa knjižnica, ki pa privzeto ni vključena v Python. Moram jo namestiti :https://pypi.python.org/pypi/rsa/

Po prenosu zaženimo setpy.py namestimo in nato začnemo razvojne korake.
0×02 Weibo prijava
Dejanje prijema rdečih kuvert mora biti izvedeno po prijavi, zato mora obstajati funkcija prijave, prijava ni ključ, ključ je ohranjanje piškotkov, tukaj je potrebna sodelovanje cookielib.
[mw_shl_code=java,true]cj = cookielib. CookieJar()opener = urllib2.build_opener(urllib2. HTTPCookieProcessor(cj))urllib2.install_opener(opener)[/mw_shl_code] Na ta način bodo vse omrežne operacije z openerjem upravljale stanje piškotkov, čeprav o tem ne vem veliko, a občutek je neverjeten.
Nato moramo zapakirati dva modula, eden je modul za zajem podatkov, ki se uporablja zgolj za PRIDOBIVANJE podatkov, drugi pa za POSTANJE podatkov.
[mw_shl_code=java,true]def getData(url) : try: req = urllib2. Request(url) result = opener.open(req) text = result.read() text=text.decode("utf-8").encode("gbk",'ignore') vrni besedilo razen Exception, e:                print u' request exception, url: '+url print e def postData(url,data,header) : try: data = urllib.urlencode(data) req = urllib2. Request(url,data,header) result = opener.open(req) text = result.read() vrni besedilo razen Exception, e: print u'Request exception, url: '+url[/mw_shl_code] S tema dvema moduloma lahko GET in POST podatke, med katerimi je razlog, zakaj getData dekodira in nato kodira, ta, da sem pod Win7 vedno pomešal izhod med razhroščevanjem, zato sem dodal nekaj kodiranja, a to ni bistvo, funkcija prijave spodaj je jedro Weibo prijave.
[mw_shl_code=Java,true]def login(nick, pwd): print u"----------login----------" print "----------......----------" prelogin_url= 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.15)&_= 1400822309846' % nick preLogin = getData(prelogin_url) servertime = re.findall('"servertime":(.+?),' , preLogin)[0] pubkey = re.findall('"pubkey":"(.+?)",' , preLogin)[0] rsakv = re.findall('"rsakv":"(.+?)",' , preLogin)[0] nonce = re.findall('"nonce":"(.+?)",' , preLogin)[0] #print bytearray('xxxx','utf-8') su = base64.b64encode(urllib.quote(nick))        rsaPublickey= int(pubkey,16) key = rsa. PublicKey(rsaPublickey,65537) message = str(servertime) +'\t' + str(nonce) + '\n' + str(pwd) sp = binascii.b2a_hex(rsa.encrypt(message,key)) glava = {'User-Agent' : 'Mozilla/5.0 (združljivo; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'} param = { 'entry': 'weibo', 'gateway': '1', 'from': ''savestate': '7', 'userticket': '1',                'ssosimple login': '1', 'vsnf': '1', 'vsnval': ''', 'su': su, 'service': 'miniblog', 'servertime': servertime, 'nonce': nonce, 'pwencode': 'rsa2', 'sp': sp, 'encoding': 'UTF-8', 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', 'returntype': 'META', 'rsakv' : rsakv, } s = postData('http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)',param,header) try: urll = re.findall("locatio remove n.replace\(\'(.+?) \'\); " , s)[0] login=getData(urll) print u"--------- Prijava uspešna! ------- "print" ----------......---------- "razen Exception, e: print u" --------- prijava ni uspela! -------" print "----------......----------" exit(0)[/mw_shl_code] Parametri in algoritmi šifriranja v tem so kopirani z interneta, ne razumem dobro, verjetno je treba najprej zahtevati časovni žig in javni ključ, nato RSA šifriranje in na koncu obdelati obdelavo in to poslati v Sina prijavni vmesnik, po uspešni prijavi iz Sina bo vrnil Weibo naslov, ki ga morate zahtevati, da se status prijave popolnoma uveljavi. Po uspešni prijavi bodo nadaljnje zahteve vsebovale piškotek trenutnega uporabnika.
0×03 Označena rdeča ovojnica
Po uspešni prijavi na Weibo komaj čakam, da najdem rdečo kuverto, da jo najprej preizkusim, seveda najprej v brskalniku. Končno sem našel stran z rdečim gumbom za ovojnico, F12 je priklical razhroščevalnik, da bi videl, kaj podatkovni paket zahteva.

Lahko vidite, da je naslov zahteve http://huodong.weibo.com/aj_hongbao/getlucky, obstajata dva glavna parametra, eden je ouid, torej rdeči ID ovojnice, ki je viden v URL-ju, drugi parameter share določa, ali ga deliti z Weibo, in obstaja _t, za katerega ne vem, za kaj je.
V redu, teoretično lahko zaključite izvleček rdečih kuvert tako, da na ta URL pošljete tri parametre, vendar ko dejansko oddate parametre, boste ugotovili, da vam strežnik čudežno vrne tak niz:
[mw_shl_code=java, res] {"code":303403,"msg":"Oprostite, nimate dovoljenja za dostop do te strani","data":[]}[/mw_shl_code] Ne paničarite zdaj, glede na moje dolgoletne izkušnje spletnega razvoja bi moral programer druge strani oceniti referer, zelo preprosto, kopirati vse glave pretekle zahteve.
[mw_shl_code=java,true]def getLucky(id): #抽奖程序 print u"--- nariši rdečo ovojnico iz:"+str(id)+"---" print "----------......----------" if checkValue(id)==False: #不符合条件, to je funkcija return kasneje        luckyUrl="http://huodong.weibo.com/aj_hongbao/getlucky" param={ 'ouid':id, 'share':0, '_t':0 } glava= {                'Cache-Control':'no-cache', 'Content-Type':'application/x-www-form-urlencoded', 'Origin':'http://huodong.weibo.com', 'Pragma':'no-cache', 'Referer': 'http://huodong.weibo.com/hongbao/'+str(id), 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, kot Gecko) Chrome/33.0.1750.146 BIDUBrowser/6.x Safari/537.36', 'X-Requested-With':'XMLHttpRequest' } res = postData(luckyUrl,param, glava)[/mw_shl_code] V tem primeru teoretično ni problema, v resnici pa ga ni. Ko je loterijska akcija zaključena, moramo oceniti status, in vrnjena res je json niz, kjer je koda 100000 uspešna, in če je 90114, je to zgornja meja današnje loterije, ostale vrednosti pa so prav tako neuspešne, torej:
[mw_shl_code=java,true]hbRes=json.loads(res)if hbRes["code"]=='901114': #今天红包已经抢完 print u"--------- je dosegel zgornjo mejo---------" print "----------......----------" log('lucky', str(id)+'---'+str(hbRes["code"])+'---'+hbRes["data"]["title"]) exit(0)elif hbRes["code"]=='1000000':#成功 print u"---------Želimo ti blaginjo---------" print "----------......----------"        log('uspeh',str(id)+'---'+res) izhod(0) če hbRes["data"] in hbRes["data"]["title"]: natisni hbRes["data"]["title"] natisni "----------......----------" log('lucky', str(id)+'---'+str(hbRes["code"])+'---'+hbRes["data"]["title"])else: print u"---------Request error---------" print "----------......----------" log('lucky', str(id)+'---'+res)[/mw_shl_code], kjer je log tudi funkcija, ki jo prilagodim in se uporablja za beleženje dnevnikov:
[mw_shl_code=java,true]def log(type,text): fp = open(type+'.txt','a') fp.write(text) fp.write('\r\n') fp.close()[/mw_shl_code]





Prejšnji:Opombe o maksimalnih omejitvah za nalaganje PHP
Naslednji:Prenos razširitve memcache dll za PHP5.2, 5.3, 5.4, 5.5
 Najemodajalec| Objavljeno na 13. 02. 2015 22:46:37 |
0×04 Prebrskajte seznam rdečih kuvert
Po uspešnem preizkusu enega samega dejanja zbiranja rdeče kuverte je to osnovni modul za velike premike našega programa – preskakovanje seznama rdečih kuvert, kjer bi moralo biti veliko metod in vhodov za iskanje seznama rdečih kuvert, kot so različne Weibo ključne besede in podobno, vendar tukaj uporabljam najpreprostejšo metodo: iskanje po seznamu rdečih kuvert.
Na domači strani (http://huodong.weibo.com/hongbao aktivnosti z rdečo kuverto, skozi več točk, je mogoče vse opazovati, čeprav je seznam precej povezan, ga lahko povzamemo v dve kategoriji (razen najbogatejšega seznama rdečih kuvert): tema in lestvica najboljših.
Če nadaljujete s priklicem F12, analizirajte format obeh strani, začnite s seznamom tematskih oblik, kot so: http://huodong.weibo.com/hongbao/special_quyu
Lahko vidite, da so informacije o rdeči ovojnici v divu z imenom info_wrap, zato moramo le aktivirati izvorno kodo te strani, nato vzeti vse infowrape in jih preprosto obdelati, da dobimo seznam rdečih kuvert te strani, tukaj moramo uporabiti nekaj regularov:
[mw_shl_code=java,true]def getThemeList(url,p):#主题红包 print u"--------- "+str(p)+"page---------" print "----------......----------" html=getData(url+'?p='+str(p)) pWrap= re.compile(r'<div class="info_wrap">(.+?) <span class="rob_txt"></span>', re. DOTALL) #h Pridobite info_wrap običajni pInfo=re.compile(r'.+<em class="num">(.+)</em>.+<em class="num">(.+)</em>.+<em class="num">(.+).</em>.+href="(.+)" class="btn"',re. DOTALL) #获取红包信息 List=pWrap.findall(html,re. DOTALL) n=len(Seznam) če n==0: vrni za i v območju(n): #traverse vseh info_wrap div s=pInfo.match(Seznam) #取得红包信息 info=list(s.groups(0))                info[0]=float(info[0].replace('\xcd\xf2','0000')) #现金,ten->0000 try: info[1]=float(info[1].replace('\xcd\xf2','0000')) #礼品价值 razen Exception, e:                        info[1]=float(info[1].replace('\xd2\xda','00000000')) #礼品价值 info[2]=float(info[2].replace('\xcd\xf2','0000')) #已发送 if info[2]==0: info[2]=1 #防止除数为0 če info[1]==0: info[1]=1 #防止除数为0 info.append(info[0]/(info[2]+info[1])) #红包价值, denar/(število upravičencev + vrednost nagrade) # če info[0]/(info[2]+info[1])>100:                # print url luckyList.append(info) if 'class="page"' v html:#存在下一页 p=p+1 getThemeList(url,p) #递归调用自己爬取下一页[/mw_shl_code]Težko je reči, da je tako težko, in pisanje teh dveh stavkov je trajalo dolgo. V dodatku [4] je tudi informacija, ki je moj algoritem za približno oceno vrednosti rdečih kuvert. Zakaj to početi? Ker je veliko rdečih kuvert, a lahko potegnemo le štirikrat, v ogromnem morju vrečk moramo najti najvrednejše rdeče kuverte in jih nato narisati, tukaj so trije podatki za referenco: denarna vrednost, vrednost darila in število prejemnikov, seveda, če je denar majhen in je število ljudi, ki prejmejo veliko ljudi, ali pa je vrednost nagrade izjemno visoka (nekatere so celo nore v enotah po stotine milijonov). Potem ni več vredno grabiti, zato sem dolgo zadrževal in končno razvil algoritem za merjenje teže rdečih kuvert: vrednost rdeče kuverte = denar / (število prejemnikov + vrednost nagrade).
Načelo strani lestvice je enako: poiščite ključne oznake in jih redno ujemajte.
[mw_shl_code=java,true]def getTopList(url,daily,p):#排行榜红包 print u"--------- "+str(p)+"page---------" print "----------......----------" html=getData(url+'?daily='+str(daily)+'& p='+str(p)) pWrap=re.compile(r'<div class="list_info">(.+?) <span class="list_btn"></span>', re. DOTALL) #h Pridobite list_info običajni pInfo=re.compile(r'.+<em class="num">(.+)</em>.+<em class="num">(.+)</em>.+<em class="num">(.+).</em>.+href="(.+)" class="btn rob_btn"',re. DOTALL) #获取红包信息 List=pWrap.findall(html,re. DOTALL) n=len(Seznam) če n==0: vrni za i v območju(n): #Iterate skozi vse info_wrap div s=pInfo.match(Seznam) #取得红包信息 topinfo=list(s.groups(0))                info=list(topinfo) info[0]=topinfo[1].replace('\xd4\xaa','') #元->'' info[0]=float(info[0].replace('\xcd\xf2','0000')) #现金,10,>0000 info[1]=topinfo[2]. replace('\xd4\xaa','') #元->'' try: info[1]=float(info[1].replace('\xcd\xf2','0000')) #礼品价值 razen izjeme, e:                        info[1]=float(info[1].replace('\xd2\xda','00000000')) #礼品价值 info[2]=topinfo[0].replace('\xb8\xf6','') #个->'' info[2]=float(info[2].replace('\xcd\xf2','0000')) #已发送                if info[2]==0: info[2]=1 #防止除数为0 if info[1]==0: info[1]=1 #防止除数为0 info.append(info[0]/(info[2]+info[1])) #红包价值, gotovina/(število prejemnikov + vrednost darila)                # če info[0]/(info[2]+info[1])>100: # print url luckyList.append(info) if 'class="page"' v html:#存在下一页 p=p+1                getTopList(url,daily,p) #递归调用自己爬取下一页[/mw_shl_code]V redu, zdaj lahko uspešno preiščemo seznam dveh posebnih strani, naslednji korak pa je, da pridobimo seznam seznamov, torej zbirko vseh teh naslovov seznamov, in jih nato pridobimo enega za drugim:
[mw_shl_code=java,true]def getList(): print u"---------Find target---------" print "----------......----------" themeUrl={ #主题列表 'theme':'http://huodong.weibo.com/hongbao/theme',                 'pinpai':'http://huodong.weibo.com/hongbao/special_pinpai', 'daka':'http://huodong.weibo.com/hongbao/special_daka', 'youxuan':'http://huodong.weibo. com/hongbao/special_youxuan', 'qiye':'http://huodong.weibo.com/hongbao/special_qiye', 'quyu':'http://huodong.weibo.com/hongbao/special_quyu', 'meiti':'http: huodong.weibo.com/hongbao/special_meiti', 'hezuo':'http://huodong.weibo.com/hongbao/special_hezuo' } topUrl={ #排行榜列表 'mostmoney':'http://huodong.weibo. com/hongbao/top_mostmoney', 'mostsend':'http://huodong.weibo.com/hongbao/top_mostsend', 'mostsenddaka':'http://huodong.weibo.com/hongbao/top_mostsenddaka',                'mostsendpartner':'http://huodong.weibo.com/hongbao/top_mostsendpartner', 'cate':'http://huodong.weibo.com/hongbao/cate?type=', 'oblačila':'http://huodong.weibo.com/ hongbao/cate?type=clothes', 'beauty':'http://huodong.weibo.com/hongbao/cate?type=beauty', 'fast':'http://huodong.weibo.com/hongbao/cate?type=fast', 'life':'http: huodong.weibo.com/hongbao/cate?type=life', 'digital':'http://huodong.weibo.com/hongbao/cate?type=digital', 'other':'http://huodong.weibo.com/hongbao/cate?type=other'                } for (theme,url) v themeUrl.items(): print "----------"+theme+"----------" print url print "----------......----------"                getThemeList(url,1) za (top,url) v topUrl.items(): print "----------"+top+"----------" print url print "----------......----------"                getTopList(url,0,1) getTopList(url,1,1)[/mw_shl_code]
 Najemodajalec| Objavljeno na 13. 02. 2015 22:47:13 |
0×05 Presodi o razpoložljivosti rdečih kuvert
To je razmeroma preprosto: najprej poiščite ključne besede v izvorni kodi, da vidite, ali obstaja rdeč gumb za prijem kuverte, nato pa pojdite na razvrstitev zbirke, da vidite, kateri rekord je najvišji, če največ prejme le nekaj dolarjev, nasvidenje......
Naslov za ogled zapisa o izterjavi je http://huodong.weibo.com/aj_hongbao/detailmore?page=1&type=2&_t=0&__rnd=1423744829265&uid=Red Envelope ID

[mw_shl_code=java,true]def checkValue(id): infoUrl='http://huodong.weibo.com/hongbao/'+str(id) html=getData(infoUrl) if 'action-type="lottery"' v html ali True: #存在抢红包按钮                logUrl="http://huodong.weibo.com/aj_hongbao/detailmore?page=1&type=2&_t=0&__rnd=1423744829265&uid="+id #查看排行榜数据 param={} header= { 'Cache-Control': 'no-cache', 'Content-Type':'application/x-www-form-urlencoded', 'Pragma':'no-cache', 'Referer':'http://huodong.weibo.com/hongbao/detail? uid='+str(id), 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, kot Gecko) Chrome/33.0.1750.146 BIDUBrowser/6.x Safari/537.36', 'X-Requested-With':'XMLHttpRequest' } res = postData(logUrl,param,header) pMoney=re.compile(r'<span class="money">(\d+?. +?) \xd4\xaa</span>', re. DOTALL) #h Spravite vse list_info redne goste luckyLog=pMoney.findall(html,re. DOTALL) če len(luckyLog)==0: maxMoney=0 else: maxMoney=float(luckyLog[0]) if maxMoney <najnižja: #记录中最大红包小于设定值 vrni Napačno drugače: natisni u"--------- roka upočasni---------" natisni "----------......----------" vrni napačno        vrnitev True[/mw_shl_code]0×06 Zaključna dela
Glavni moduli so že na mestu, zdaj pa je treba vse korake povezati v serijo:
[mw_shl_code=java,true]def start(uporabniško ime,password,low,fromFile): gl=False lowest=low login(uporabniško ime , geslo) if fromfile=='y': if os.path.exists('luckyList.txt'):                         try: f = file('luckyList.txt') newList = [] newList = p.load(f)                                print u'--------- seznam nalaganja---------' print "----------......----------" razen Exception, e: print u' ni uspelo razčleniti lokalnega seznama, saj je spletna stran preiskala. ' print "----------......----------" gl=Res else: print u' ne obstaja lokalno luckyList.txt pajenjem spletnih strani. ' print "----------......----------" gl=True, če gl==True: getList() iz operatorja uvoz itemgetter                newList=sorted(luckyList, key=itemgetter(4),reverse=True) f = file('luckyList.txt', 'w') p.dump(newList, f) #把抓到的列表存到文件里, tako da naslednjič ni treba ujeti f.close() za lucky in newList: če ne 'http://huodong.weibo.com' v lucky[3]: #不是红包 nadaljuj tiskati lucky[3] id=re.findall(r'(\w*[0-9]+)\w*',lucky[3])                getLucky(id[0])[/mw_shl_code] Ker je zelo težavno vsakič znova pregledovati seznam rdečih kuvert, sem dodal odstavek, da celoten seznam vnesem v kodo datoteke, da lahko v prihodnje preberete lokalni seznam in vzamete rdečo kuverto.
[mw_shl_code=java,true]če __name__ == "__main__": print u"------------------ Weibo Red Envelope Assistant------------------" print "---------------------v0.0.1---------------------" print u"------------- avtor @***----------------" Tiskaj "-------------------------------------------------" try: uname=raw_input(u"Prosimo, vnesite svoj Weibo račun: ".decode('utf-8').encode('gbk'))                pwd=raw_input(u"Prosimo, vnesite svoje Weibo geslo: ".decode('utf-8').encode('gbk')) low=int(raw_input(u"Rdeča kuverta za prejem največjega denarja večjega od n: ".decode('utf-8').encode('gbk')))) fromfile=raw_input(u) Ali uporabiti seznam rdečih ovojnic v luckyList.txt: (y/n) ".decode('utf-8').encode('gbk')) razen Exception, e: print u" parameter error" print "----------......----------" print e                izhod(0) natisni u"--------- začni program---------" natisni "----------......----------" začetek(uname,pwd, low, fromfile) natisni u" --------- konec programa--------- "natisni "----------...... ----------" os.system('pauza')[/mw_shl_code]
0×07 Gremo!

Povzetek 0×07
Osnovni skelet pajka je v bistvu dokončan, pravzaprav je še vedno veliko prostora za ta pajk pri mnogih podrobnostih, kot so prilagoditve za podporo serijski prijavi, optimizacija algoritma za vrednost rdeče ovojnice; koda bi morala imeti veliko možnosti za optimizacijo, a glede na moje sposobnosti ocenjujem, da lahko to dosežem.
Na koncu so vsi videli rezultat programa, napisal sem na stotine vrstic kode, tisoče besed člankov, in vse, za kar sem trdo delal, je bil komplet dvobarvnih kroglic, Nima pit oče, kako bi lahko bila dvobarvna kroglica!! (Pripovedovalec: Bolj ko je avtor govoril, bolj je bil navdušen, dejansko je jokal, ljudje okoli njega pa so ga prepričevali: Brat, ni tako, ali ni to samo rdeča kuverta Weibo, včeraj so me bolele roke in nisem stresel rdeče kuverte WeChat.) )

Objavljeno na 14. 02. 2015 07:14:33 |
Koliko denarja si vzel v Loulou?
Objavljeno na 2. 03. 2016 13:48:27 |
Izgleda tako visok
Objavljeno na 7. 03. 2016 12:51:02 |
Ne vem, če je resno
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com