Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 13448|Svare: 5

Hvordan ta tak i røde konvolutter vitenskapelig: På slutten av året kan du bli rik og skrive et program for å få tak i røde konvolutter

[Kopier lenke]
Publisert på 13.02.2015 22:44:10 | | | |
0×00 Bakgrunn

Hvordan er de røde konvoluttene? Brorens sønn, Huer, sa: «Pengene er nesten sammenlignbare. Broren og datteren Dao Yun sa: «Det er ikke like bra som tanten min på grunn av vinden.» "Alle forstår bakgrunnen, det er nyttår, og det er dagen da røde konvolutter flyr over himmelen. Det skjedde at jeg lærte Python for to dager siden, og jeg ble mer begeistret, så jeg studerte og studerte krypingen av Weibo røde konvolutter, hvorfor Weibo røde konvolutter i stedet for Alipay røde konvolutter, fordi jeg bare forstår nettet, og hvis jeg har energi, kan jeg også studere whack-a-mole-algoritmen i fremtiden.
Siden jeg er nybegynner i Python, er dette også det tredje programmet jeg skrev etter å ha lært Python, så vær så snill, ikke prøv personlig om det er en grop i koden, fokuset er på ideen, vel, hvis det er en grop i ideen, vær så snill å ikke pirke på det personlig, du skjønner at IE har ansiktet til å sette seg selv som standardnettleser, jeg skriver at en skitne artikkel også er akseptabelt......
Jeg bruker Python 2.7, og det sies at det er stor forskjell mellom Python 2 og Python 3.
0×01 Ideer
Jeg var for lat til å beskrive det med ord, så jeg tegnet en skisse, og alle burde kunne forstå det.
Først og fremst, den gamle regelen: introduser først et bibliotek du ikke vet er nyttig for, men som du ikke kan klare deg uten:
[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] Deklarer deretter noen andre variabler som du må bruke senere:

[mw_shl_code=java,true]reload(sys)sys.setdefaultencoding('utf-8&') #将字符编码置为utf-8luckyList=[] #红包列表lowest=10 #能忍受红包领奖记录最低为多少[/mw_shl_code]Et rsa-bibliotek brukes her, som ikke er inkludert i Python som standard. Må installere det :https://pypi.python.org/pypi/rsa/

Etter å ha lastet det ned, kjør setpy.py installasjonen, og så kan vi starte utviklingsprosessen.
0×02 Weibo-innlogging
Handlingen med å hente røde konvolutter må utføres etter innlogging, så det må finnes en innloggingsfunksjon, innlogging er ikke nøkkelen, nøkkelen er bevaring av informasjonskapsler, her kreves samarbeid med cookielib.
[mw_shl_code=java,true]cj = cookielib. CookieJar()opener = urllib2.build_opener(urllib2. HTTPCookieProcessor(cj))urllib2.install_opener(opener)[/mw_shl_code] På denne måten vil alle nettverksoperasjoner som bruker opener håndtere tilstanden til informasjonskapsler, selv om jeg ikke vet så mye om det, men det føles fantastisk.
Deretter må vi kapsle inn to moduler, den ene er datainnsamlingsmodulen, som brukes til å HENTE data, og den andre brukes til å POSTE data.
[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",'ignorer') returnerer tekst unntatt Unntak, 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() returner tekst unntatt Unntak, f.eks: print u'Request exception, url: '+url[/mw_shl_code] Med disse to modulene kan vi FÅ og POST-data, hvorav grunnen til at getData dekoder og deretter koder er fordi jeg under Win7 alltid forvrengte utdataene under feilsøking, så jeg la til noe kodingsprosessering, men dette er ikke poenget, innloggingsfunksjonen under er kjernen i Weibo-innlogging.
[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)) header = {'User-Agent' : 'Mozilla/5.0 (kompatibel; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'} param = { 'entry': 'weibo', 'gateway': '1', 'from': '', 'savestate': '7', 'userticket': '1',                'ssosimplelogin': '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) skriv ut u"--------- Innlogging vellykket! ------- "print" ----------......---------- "bortsett fra unntak, f.eks: print u" --------- innlogging feilet! -------" skriv ut "----------......----------" exit(0)[/mw_shl_code]Parameterne og krypteringsalgoritmene i dette er kopiert fra Internett, jeg forstår det ikke så godt, sannsynligvis er det for å be om tidsstempel og offentlig nøkkel først, deretter RSA-kryptering og til slutt behandle behandlingen og sende det til Sina innloggingsgrensesnittet, etter vellykket innlogging fra Sina vil det returnere en Weibo-adresse, du må be om det, slik at innloggingsstatusen kan tre i kraft fullt ut, Etter vellykket innlogging vil påfølgende forespørsler bære den nåværende brukerens informasjonskapsel.
0×03 Utpekt rød konvolutttegning
Etter å ha logget inn på Weibo, gleder jeg meg til å finne en rød konvolutt å prøve først, selvfølgelig først i nettleseren. Til slutt fant jeg en side med en rød konvoluttknapp, F12 tilkalte debuggeren for å se hva datapakken ba om.

Du kan se at adressen til forespørselen er http://huodong.weibo.com/aj_hongbao/getlucky, det er to hovedparametere, en er ouid, altså den røde envelope-id-en, som kan sees i URL-en, den andre share-parameteren avgjør om den skal deles til Weibo, og det er en _t jeg ikke vet hva den er til.
Ok, teoretisk sett kan du fullføre uttrekkingen av røde konvolutter ved å sende tre parametere til denne URL-en, men når du faktisk sender inn parameterne, vil du oppdage at serveren magisk returnerer en slik streng til deg:
[mw_shl_code=java, sant] {"code":303403,"msg":"Beklager, du har ikke tillatelse til å få tilgang til denne siden","data":[]}[/mw_shl_code] Ikke få panikk nå, ifølge mine mange års erfaring med webutvikling bør den andre partens programmerer vurdere refereren, veldig enkelt, kopier alle headerne fra forrige forespørsel.
[mw_shl_code=java,true]def getLucky(id): #抽奖程序 print u"--- trekk rød konvolutt fra:"+str(id)+"---" skriv ut "----------......----------" hvis checkValue(id)==False: #不符合条件, dette er funksjonen return later        luckyUrl="http://huodong.weibo.com/aj_hongbao/getlucky" param={ 'ouid':id, 'share':0, '_t':0 } header= {                '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, som Gecko) Chrome/33.0.1750.146 BIDUBrowser/6.x Safari/537.36', 'X-Requested-With':'XMLHttpRequest' } res = postData(luckyUrl,param, header)[/mw_shl_code] I dette tilfellet er det ikke noe problem i teorien, men faktisk er det ikke noe problem. Etter at lotterihandlingen er fullført, må vi vurdere statusen, og den returnerte resen er en json-streng, hvor koden er 100000 er vellykket, og hvis den er 90114, er det øvre grense for dagens lotteri, og de andre verdiene feiler også, altså:
[mw_shl_code=java,true]hbRes=json.loads(res)if hbRes["code"]=='901114': #今天红包已经抢完 print u"--------- har nådd øvre grense---------" print "----------......----------" log('lucky', str(id)+'---'+str(hbRes["code"])+'---'+hbRes["data"]["title"]) exit(0)elif hbRes["code"]=='100000':#成功 skriv ut u"---------Ønsker deg vellykke---------" skriv ut "----------......----------"        log('suksess',str(id)+'---'+res) exit(0) if hbRes["data"] og hbRes["data"]["title"]: print hbRes["data"]["title"] print "----------......----------" log('lucky', str(id)+'---'+str(hbRes["kode"])+'---'+hbRes["data"]["title"])ellers: print u"---------Request error---------" print "----------......----------" log('lucky', str(id)+'---'+res)[/mw_shl_code], hvor log også er en funksjon jeg tilpasser, som brukes til å registrere logger:
[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]





Foregående:Notater om maksimale PHP-opplastingsgrenser
Neste:memcache dll-utvidelse nedlasting for PHP5.2, 5.3, 5.4, 5.5
 Vert| Publisert på 13.02.2015 22:46:37 |
0×04 Crawl gjennom listen over røde konvolutter
Etter vellykket test av en enkelt rød konvoluttinnsamling, er det kjernen i programmet vårt – å crawle den røde konvoluttlisten, det bør finnes mange metoder og innganger for å crawle den røde konvoluttlisten, som ulike Weibo-søkeord og lignende, men jeg bruker den enkleste metoden her: å crawle den røde konvoluttlisten.
På hjemmesiden (http://huodong.weibo.com/hongbao av den røde konvoluttaktiviteten, gjennom ulike punkter, kan alle observeres, selv om listen er mye sammenkoblet, kan den oppsummeres i to kategorier (bortsett fra den rikeste røde konvoluttlisten): tema og toppliste.
Ved å fortsette å påkalle F12, analyser formatet på begge sidene, med start med en liste over tematiske former, som: http://huodong.weibo.com/hongbao/special_quyu
Du kan se at informasjonen om den røde konvolutten er i en div kalt info_wrap, så vi trenger bare å aktivere kildekoden til denne siden, og deretter hente alle infowrapene, og så enkelt behandle den for å få den røde konvoluttlisten til denne siden, her må vi bruke noen regulars:
[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">(.+?) <spenn klassen="rob_txt">'</span>', re. DOTALL) #h Få info_wrap den vanlige pInfo=re.compile(r'.+<em class="num">(.+)</em>.+<em class="num">(.+)</em>.+<em class="num">(.+).</em>.+href="(.+)" klasse="btn"',re. DOTALL) #获取红包信息 List=pWrap.findall(html,re. DOTALL) n=len(Liste) hvis n==0: returner for i i i range(n): #traverse alle info_wrap div s=pInfo.match(List) #取得红包信息 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')) #礼品价值 unntatt Unntak, e:                        info[1]=float(info[1].replace('\xd2\xda','00000000')) #礼品价值 info[2]=float(info[2].replace('\xcd\xf2','0000')) #已发送 hvis info[2]==0: info[2]=1 #防止除数为0 hvis info[1]==0: info[1]=1 #防止除数为0 info.append(info[0]/(info[2]+info[1])) #红包价值, kontanter/(antall mottakere + premieverdi) # hvis info[0]/(info[2]+info[1])>100:                # print url luckyList.append(info) hvis 'class="page"' i html:#存在下一页 p=p+1 getThemeList(url,p) #递归调用自己爬取下一页[/mw_shl_code]Det er så vanskelig å si at det er så vanskelig, og det tok lang tid å skrive disse to setningene. Det finnes også informasjon i infoen her ved [4], som er min algoritme for å grovt vurdere verdien av røde konvolutter, hvorfor gjøre dette, fordi det finnes mange røde konvolutter, men vi kan bare trekke fire ganger, i det enorme havet av poser må vi finne de mest verdifulle røde konvoluttene og deretter trekke dem, her er tre data til referanse: kontantverdi, gaveverdi og antall mottakere, selvfølgelig hvis pengene er små og antallet personer som mottar mange eller verdien av premien er superhøy (noen er til og med gale i enheter på hundrevis av millioner), Da er det ikke verdt å ta tak i, så jeg holdt igjen lenge og kom til slutt opp med en algoritme for å måle vekten av røde konvolutter: rød konvoluttverdi = kontanter / (antall mottakere + premieverdi).
Prinsippet for ledertavlen er det samme: finn nøkkeltaggene og match dem jevnlig.
[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">(.+?) <spenn klasse="list_btn">',</span> re. DOTALL) #h Få list_info den vanlige pInfo=re.compile(r'.+<em class="num">(.+)</em>.+<em class="num">(.+)</em>.+<em class="num">(.+).</em>.+href="(.+)" klasse="btn rob_btn"',re. DOTALL) #获取红包信息 List=pWrap.findall(html,re. DOTALL) n=len(Liste) hvis n==0: returner for i i intervall(n): #Iterate gjennom alle info_wrap div s=pInfo.match(List) #取得红包信息 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')) #礼品价值 unntatt Unntak, 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')) #已发送                hvis info[2]==0: info[2]=1 #防止除数为0 hvis info[1]==0: info[1]=1 #防止除数为0 info.append(info[0]/(info[2]+info[1])) #红包价值, kontanter/(antall mottakere + gaveverdi)                # hvis info[0]/(info[2]+info[1])>100: # skriv ut URL luckyList.append(info) hvis 'class="page"' i html:#存在下一页 p=p+1                getTopList (URL, daglig, p) #递归调用自己爬取下一页[/mw_shl_code]Ok, nå kan vi gjennomsøke listen til de to spesialsidene med suksess, og neste steg er å hente listen over lister, altså samlingen av alle disse listeadressene, og deretter hente dem én etter én:
[mw_shl_code=java,true]def getList(): print u"---------Find target---------" skriv ut "----------......----------" 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=', 'clothes':'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) i themeUrl.items(): print "----------"+theme+"----------" print URL print "----------......----------"                getThemeList(url,1) for (top,url) i topUrl.items(): print "----------"+top+"----------" print url print "----------......----------"                getTopList(url,0,1) getTopList(url,1,1)[/mw_shl_code]
 Vert| Publisert på 13.02.2015 22:47:13 |
0×05 Vurder tilgjengeligheten av røde konvolutter
Dette er relativt enkelt: søk først etter nøkkelord i kildekoden for å se om det finnes en rød envelope grab-knapp, og gå deretter til samlingsrangeringen for å se hva den høyeste posten er, hvis den høyeste bare får noen få dollar, farvel......
Adressen for å se samlingsposten er http://huodong.weibo.com/aj_hongbao/detailmore?page=1&type=2&_t=0&__rnd=1423744829265&uid=Red Konvolutt-ID

[mw_shl_code=java,true]def checkValue(id): infoUrl='http://huodong.weibo.com/hongbao/'+str(id) html=getData(infoUrl) hvis 'action-type="lottery"' i html eller 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, som 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 Få alle list_info faste brukerne luckyLog=pMoney.findall(html,re. DOTALL) hvis len(luckyLog)==0: maxMoney=0 ellers: maxMoney=float(luckyLog[0]) hvis maxMoney <laveste: #记录中最大红包小于设定值 returner falsk ellers: print u"--------- hånden sakker ned---------" skriv ut "----------......----------" returner falsk        returner True[/mw_shl_code]0×06 Avsluttende arbeid
Hovedmodulene er allerede på plass, og nå må alle trinnene kobles i serie:
[mw_shl_code=java,true]def start(username,password,low,fromFile): gl=False lowest=lav innlogging(brukernavn, passord) hvis fromfile=='y': hvis os.path.exists('luckyList.txt'):                         try: f = file('luckyList.txt') newList = [] newList = p.load(f)                                skriv ut u'--------- lasteliste---------' skriv ut "----------......----------" unntatt unntak, e: print u' klarte ikke å parse den lokale listen og crawlet nettsiden. ' print "----------......----------" gl=Sant ellers: print u' eksisterer ikke lokalt luckyList.txt crawling av nettsider. ' print "----------......----------" gl=True if gl==True: getList() fra operator import itemgetter                newList=sorted(luckyList, key=itemgetter(4),reverse=True) f = file('luckyList.txt', 'w') p.dump(newList, f) #把抓到的列表存到文件里, så du trenger ikke å fange f.close() for lucky in neste gang newList: hvis ikke 'http://huodong.weibo.com' i lucky[3]: #不是红包 fortsett, print lucky[3] id=re.findall(r'(\w*[0-9]+)\w*',lucky[3])                getLucky(id[0])[/mw_shl_code] Fordi det er veldig vanskelig å crawle den røde konvoluttlisten gjentatte ganger hver gang den testes, la jeg til et avsnitt for å dumpe hele listen i filkoden, slik at du kan lese den lokale listen og hente den røde konvolutten senere.
[mw_shl_code=java,true]hvis __name__ == "__main__": skriv ut u"------------------ Weibo Red Envelope Assistant------------------" skriv ut "---------------------v0.0.1---------------------" skriv ut u"------------- by @***----------------" skriv ut "-------------------------------------------------" prøv: uname=raw_input(u"Vennligst skriv inn din Weibo-konto: ".decode('utf-8').encode('gbk'))                pwd=raw_input(u"Vennligst skriv inn ditt Weibo-passord: ".decode('utf-8').encode('gbk')) low=int(raw_input(u"Rød konvolutt for å motta maksimalt antall kontanter større enn n: ".decode('utf-8').encode('gbk')))) fromfile=raw_input(u) Om man skal bruke den røde konvoluttlisten i luckyList.txt: (y/n) ".decode('utf-8').encode('gbk')) unntatt unntak, e: print u" parameter error" print "----------......----------" print e                exit(0) print u"--------- program start---------" print "----------......----------" start(uname,pwd,low,fromfile) print u" --------- program end--------- «print ut» ----------...... ----------" os.system('pause')[/mw_shl_code]
0×07 La oss gå!

0×07 Sammendrag
Det grunnleggende crawler-skjelettet er i praksis ferdig, faktisk er det fortsatt mye rom for denne crawleren til å spille på mange detaljer, som å modifisere det for å støtte batch-innlogging, som å optimalisere algoritmen for rød envelope-verdi, koden burde også ha mange steder å optimalisere, men med min evne anslår jeg at jeg kan få til dette.
Til slutt så alle resultatet av programmet, jeg skrev hundrevis av linjer med kode, tusenvis av ord med artikler, og alt jeg jobbet hardt for å få var bare et sett med tofargede baller, Nima pit-pappa, hvordan kunne det være en tofarget ball!! (Forteller: Jo mer forfatteren snakket, jo mer begeistret ble han, og han gråt faktisk, og folkene rundt ham overtalte: Bror, det er ikke sånn, er det ikke bare en Weibo rød konvolutt, i går var hendene mine ømme, og jeg ristet ikke ut en WeChat rød konvolutt.) )

Publisert på 14.02.2015 07:14:33 |
Hvor mye penger tok du i Loulou?
Publisert på 02.03.2016 13:48:27 |
Ser så høy ut
Publisert på 07.03.2016 12:51:02 |
Jeg vet ikke om det er alvorlig
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com