Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 13448|Odpowiedź: 5

Jak naukowo złapać czerwone koperty: Pod koniec roku możesz się wzbogacić i napisać program do zdobycia czerwonych kopert

[Skopiuj link]
Opublikowano 13.02.2015 22:44:10 | | | |
Tło 0×00

Jak wyglądają czerwone koperty? Syn jego brata, Huer, powiedział: "Pieniądze są niemal porównywalne. Brat i córka Dao Yun powiedzieli: "Nie jest tak dobre jak u mojej ciotki przez wiatr." "Wszyscy rozumieją tło, to Nowy Rok i dzień, gdy czerwone koperty latają po całym niebie. Tak się złożyło, że dwa dni temu nauczyłem się Pythona i byłem bardziej podekscytowany, więc studiowałem i analizowałem pełzanie czerwonych kopert Weibo, dlaczego czerwone koperty Weibo zamiast Alipay czerwone, bo rozumiem tylko Internet, a jeśli będę miał na to siłę, być może w przyszłości zgłębię algorytm whack-a-mole.
Ponieważ jestem początkujący w Pythonie, ten program jest też trzecim, który napisałem po nauce Pythona, więc proszę, nie pytaj osobiście, jeśli w kodzie jest jakaś przeszkoda, skupiam się na idei, a jeśli jest jakaś przeszkoda w pomyśle, proszę, nie poruszaj tego osobiście, widzisz, IE ma twarz, by ustawić się jako domyślna przeglądarka, piszę artykuł o podejrzaniu też jest akceptowalne......
Używam Pythona 2.7 i mówi się, że jest duża różnica między Pythonem 2 a Pythonem 3.
0×01 Pomysły
Byłem zbyt leniwy, by opisać to słowami, więc narysowałem szkic i wszyscy powinni to zrozumieć.
Przede wszystkim stara zasada: najpierw wprowadź bibliotekę, której nie wiesz, czy jest przydatna, ale bez której nie możesz się obejść:
[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] Następnie zadeklaruj inne zmienne, które będziesz musiał wykorzystać później:

[mw_shl_code=java,true]reload(sys)sys.setdefaultencoding('utf-8&') #将字符编码置为utf-8luckyList=[] #红包列表lowest=10 #能忍受红包领奖记录最低为多少[/mw_shl_code]Tutaj używana jest biblioteka rsa, która domyślnie nie jest dołączona do Pythona. Muszę go zainstalować :https://pypi.python.org/pypi/rsa/

Po pobraniu uruchom setpy.py instalację, a potem możemy rozpocząć etapy rozwoju.
0×02 Login Weibo
Działanie polegające na chwytaniu czerwonych kopert musi być wykonane po zalogowaniu, więc musi istnieć funkcja logowania, logowanie nie jest kluczem, kluczem jest zachowanie ciasteczek, tutaj wymagana jest współpraca cookielib.
[mw_shl_code=Java,true]cj = cookielib. CookieJar()opener = urllib2.build_opener(urllib2. HTTPCookieProcessor(cj))urllib2.install_opener(opener)[/mw_shl_code] W ten sposób wszystkie operacje sieciowe z użyciem openera obsługują stan ciasteczek, choć niewiele o tym wiem, ale to niesamowite uczucie.
Następnie musimy zapakować dwa moduły: jeden to moduł akwizycji danych, który służy po prostu do pobierania danych, a drugi do POST-owania.
[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') zwróć tekst z wyjątkiem wyjątku, 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() zwróć tekst z wyjątkiem Wyjątku, e: print u'Request exception, url: '+url[/mw_shl_code] Dzięki tym dwóm modułom możemy GET i POST danych, z których powodem, dla którego getData dekoduje, a potem koduje, jest to, że w Win7 zawsze zniekształcałem wynik podczas debugowania, więc dodałem trochę przetwarzania kodowania, ale to nie jest sedno – funkcja logowania poniżej to rdzeń logowania na Weibo.
[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) serwertime = 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)) nagłówek = {'User-Agent' : 'Mozilla/5.0 (kompatybilne; 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) print u"--------- Logowanie zakończyło się! ------- "drukuj" ----------......---------- "poza wyjątkiem, e: wydrukuj u" --------- logowanie się nie powiodło! -------" drukuj "----------......----------" exit(0)[/mw_shl_code] Parametry i algorytmy szyfrowania są skopiowane z Internetu, nie rozumiem tego zbyt dobrze, prawdopodobnie najpierw chodzi o żądanie znacznika czasu i klucza publicznego, potem szyfrowanie RSA, a na końcu przetwarzanie i przesłanie do interfejsu logowania Siny, po pomyślnym zalogowaniu z Sina zwróci się adres Weibo, musisz o niego poprosić, aby status logowania mógł zadziałać w pełni. Po pomyślnym zalogowaniu kolejne żądania będą zawierać ciasteczko aktualnego użytkownika.
0×03 Oznaczony rysunek na czerwonej kopercie
Po pomyślnym zalogowaniu się na Weibo nie mogę się doczekać, aż najpierw znajdę czerwoną kopertę, żeby spróbować najpierw w przeglądarce. W końcu znalazłem stronę z czerwonym przyciskiem koperty, F12 przywołał debugger, żeby zobaczyć, czego żąda pakiet danych.

Widać, że adres żądania to http://huodong.weibo.com/aj_hongbao/getlucky, są dwa główne parametry: jeden to ouid, czyli czerwony identyfikator koperty, widoczny w URL, drugi parametr share decyduje, czy udostępnić go do Weibo, i jest _t, do którego nie wiem, do czego służy.
Teoretycznie możesz zakończyć ekstrakcję czerwonych kopert, wysyłając trzy parametry do tego URL, ale gdy faktycznie je przesłasz, serwer magicznie zwróci ci taki ciąg znaków:
[mw_shl_code=java, prawda] {"code":303403,"msg":"Przepraszam, nie masz uprawnień do dostępu do tej strony","data":[]}[/mw_shl_code] Nie panikuj w tym momencie, według mojego wieloletniego doświadczenia w tworzeniu stron internetowych, programista drugiej strony powinien prosto ocenić referer, bardzo prosto, skopiować wszystkie nagłówki poprzedniego żądania.
[mw_shl_code=java,true]def getLucky(id): #抽奖程序 print u"--- narysuj czerwoną kopertę z:"+str(id)+"---" print "----------......----------" if checkValue(id)==False: #不符合条件, to funkcja return później        luckyUrl="http://huodong.weibo.com/aj_hongbao/getlucky" param={ 'ouid':id, 'share':0, '_t':0 } nagłówek= {                '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, podobnie jak Gecko) Chrome/33.0.1750.146 BIDUBrowser/6.x Safari/537.36', 'X-Requested-With':'XMLHttpRequest' } res = postData(luckyUrl,param, nagłówek)[/mw_shl_code] W tym przypadku teoretycznie nie ma problemu, ale w rzeczywistości go nie ma. Po zakończeniu akcji loterii musimy ocenić status, a zwrócona RES to ciąg json, gdzie kod to 100000 jest pomyślny, a jeśli jest to 90114, to jest to górna granica dzisiejszej loterii, a pozostałe wartości również są niezaliczone, więc:
[mw_shl_code=java,true]hbRes=json.loads(res)if hbRes["code"]=='901114': #今天红包已经抢完 print u"--------- osiągnął górną granicę---------" print "----------......----------" log("lucky', str(id)+'---'+str(hbRes["code"])+'---'+hbRes["data"]["title"]) exit(0)elif hbRes["code"]=='100000':#成功 print u"---------Życząc Ci powodzenia---------" print "----------......----------"        log('success',str(id)+'---'+res) exit(0) if hbRes["data"] oraz hbRes["data"]["title"]: print hbRes["data"]["title"] print "----------......----------" log('lucky', str(id)+'---'+str(hbRes["code"])+'---'+hbRes["data"]["title"])else: print u"---------Request error---------" print "----------......----------" log('lucky', str(id)+'---'+res)[/mw_shl_code], gdzie log jest także funkcją, którą dostosowuję, a która służy do zapisywania logów:
[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]





Poprzedni:Uwagi dotyczące maksymalnych limitów przesyłania PHP
Następny:Rozszerzenie memcache DLL do pobrania dla PHP5.2, 5.3, 5.4, 5.5
 Ziemianin| Opublikowano 13.02.2015 22:46:37 |
0×04 Przeszukaj listę czerwonych kopert
Po pomyślnym teście pojedynczej akcji zbierania czerwonej koperty, jest to główny moduł ruchu naszego programu – przeszukując listę czerwonych kopert, powinno istnieć wiele metod i wejść do przeszukiwania listy czerwonych kopert, takich jak różne słowa kluczowe wyszukiwania Weibo i tak dalej, ale tutaj stosuję najprostszą metodę: przeszukiwanie listy czerwonych kopert.
Na stronie głównej (http://huodong.weibo.com/hongbao aktywności z czerwonymi kopertami, przez różne kolejne punkty, można wszystko obserwować, choć lista jest mocno powiązana, można ją podsumować w dwie kategorie (z wyjątkiem najbogatszej listy czerwonych kopert): motyw przewodni i ranking.
Kontynuując przywoływanie F12, przeanalizuj format obu stron, zaczynając od listy tematycznych form, takich jak: http://huodong.weibo.com/hongbao/special_quyu
Widać, że informacja o czerwonej kopercie znajduje się w divie o nazwie info_wrap, więc wystarczy aktywować kod źródłowy tej strony, pobrać wszystkie infowrapy i po prostu przetworzyć ją, aby uzyskać listę czerwonych kopert tej strony, tutaj musimy użyć kilku regularnych:
[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 Dostać info_wrap regularnej 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(List) jeśli n==0: wróć dla i w zakresie(n): #traverse wszystkie 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')) #礼品价值 wyjątkiem 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 jeśli info[1]==0: info[1]=1 #防止除数为0 info.append(info[0]/(info[2]+info[1])) #红包价值, gotówka/(liczba uprawnionych + wartość nagrody) # jeśli info[0]/(info[2]+info[1])>100:                # print url luckyList.append(info) if 'class="page"' w html:#存在下一页 p=p+1 getThemeList(url,p) #递归调用自己爬取下一页[/mw_shl_code]Trudno powiedzieć, że jest to tak trudne, a napisanie tych dwóch zdań zajęło dużo czasu. W załączniku [4] jest też informacja w załączniku [4], czyli mój algorytm do przybliżonej oceny wartości czerwonych kopert, dlaczego to robić, skoro jest wiele czerwonych kopert, ale możemy narysować tylko cztery razy, w ogromnym morzu toreb musimy znaleźć najcenniejsze czerwone koperty i je nalosować, oto trzy dane dla odniesienia: wartość gotówkowa, wartość prezentu i liczba obdarowanych, oczywiście jeśli gotówka jest mała, a liczba osób otrzymujących dużo osób lub wartość nagrody jest bardzo wysoka (niektóre są nawet szalone w jednostkach setek milionów), Wtedy nie warto jej kupować, więc długo się powstrzymywałem i w końcu wymyśliłem algorytm do mierzenia wagi czerwonych kopert: wartość czerwonej koperty = gotówka / (liczba laureatów + wartość nagrody).
Zasada strony rankingowej jest taka sama: znajdź kluczowe tagi i regularnie je dopasowuj.
[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 Dostać list_info regularnej 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(List) jeśli n==0: zwróć dla i w zakresie(n): #Iterate przez wszystkie info_wrap div s=pInfo.match(List) #取得红包信息 topinfo=list(s.groups(0))                info=list(topinfo) info[0]=topinfo[1].zastąpnij('\xd4\xaa','') #元->'' info[0]=float(info[0].zastąpnij('\xcd\xf2','0000')) #现金,10,>0000 info[1]=topinfo[2]. replace('\xd4\xaa','') #元->'' try: info[1]=float(info[1].replace('\xcd\xf2','0000')) #礼品价值 wyjątkiem Exception, 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])) #红包价值, gotówka/(liczba obdarowanych + wartość prezentu)                # jeśli info[0]/(info[2]+info[1])>100: # wydrukuj url luckyList.append(info) jeśli 'class="page"' w html:#存在下一页 p=p+1                getTopList(url,daily,p) #递归调用自己爬取下一页[/mw_shl_code]Dobrze, teraz możemy pomyślnie przeszukać listę dwóch specjalnych stron, a kolejnym krokiem jest pobranie listy list, czyli zbioru wszystkich adresów list, i pobranie ich pojedynczo:
[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=', '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'                } dla (theme,url) w themeUrl.items(): drukuj "----------"+theme+"----------" drukuj URL drukuj "----------......----------"                getThemeList(url,1) dla (top,url) w topUrl.items(): drukuj "----------"+top+"----------" drukuj url drukuj "----------......----------"                getTopList(url,0,1) getTopList(url,1,1)[/mw_shl_code]
 Ziemianin| Opublikowano 13.02.2015 22:47:13 |
0×05 Ocena dostępności czerwonych kopert
To stosunkowo proste – najpierw wyszukaj słowa kluczowe w kodzie źródłowym, czy jest czerwony przycisk chwytania koperty, a potem przejdź do rankingu kolekcji, by zobaczyć, jaki jest najwyższy rekord, jeśli najwięcej dostaje tylko kilka dolarów, do widzenia......
Adres, do którego można zobaczyć rekord windykacji, to 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"' w html lub 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, podobnie jak 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 Zrób wszystkich list_info stałych gości luckyLog=pMoney.findall(html,re. DOTALL) jeśli len(luckyLog)==0: maxMoney=0 else: maxMoney=float(luckyLog[0]) if maxMoney <najniższy: #记录中最大红包小于设定值 return False else: print u"--------- ręka zwalnia---------" print "----------......----------" return false        return True[/mw_shl_code]0×06 Prace wykończeniowe
Główne moduły są już na miejscu, a teraz wszystkie kroki muszą być połączone szeregowo:
[mw_shl_code=java,true]def start(username,password,low,fromFile): gl=False lowest=low login(username , password) if fromfile=='y': if os.path.exists('luckyList.txt'):                         try: f = file('luckyList.txt') newList = [] newList = p.load(f)                                print u'--------- load list---------' print "----------......----------" z wyjątkiem Exception, e: print u' nie udało się przeanalizować lokalnej listy, indeksując stronę online. ' print "----------......----------" gl=True else: print u' nie istnieje lokalnie luckyList.txt przeszukujących stronach online. ' print "----------......----------" gl=True if gl==True: getList() z operatora importu itemgetter                newList=sorted(luckyList, key=itemgetter(4),reverse=True) f = file('luckyList.txt', 'w') p.dump(newList, f) #把抓到的列表存到文件里, więc nie musisz łapać f.close() dla lucky next time newList: jeśli nie 'http://huodong.weibo.com' w lucky[3]: #不是红包 kontynuuj druk lucky[3] id=re.findall(r'(\w*[0-9]+)\w*',lucky[3])                getLucky(id[0])[/mw_shl_code] Ponieważ przeszukiwanie czerwonej koperty za każdym razem jest bardzo uciążliwe, dodałem akapit, który wprowadza pełną listę do kodu pliku, abyś mógł przeczytać lokalną listę i w przyszłości pobrać czerwoną kopertę.
[mw_shl_code=java,true]jeśli __name__ == "__main__": wydrukuj u"------------------ Weibo Red Envelope Assistant------------------" drukuj "---------------------v0.0.1---------------------" drukuj u"------------- autor: @***----------------" Drukuj "-------------------------------------------------" try: uname=raw_input(u" Prosimy o wpisanie swojego konta Weibo: ".decode('utf-8').encode('gbk'))                pwd=raw_input(u"Prosimy o wpisanie hasła Weibo: ".decode('utf-8').encode('gbk')) low=int(raw_input(u"Czerwona koperta, aby otrzymać maksymalną gotówkę większą niż n: ".decode('utf-8').encode('gbk')))) fromfile=raw_input(u) Czy użyć czerwonej listy koperty w luckyList.txt: (y/n) ".decode('utf-8').encode('gbk')) z wyjątkiem wyjątku, 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 "----------...... ----------" os.system('pauza')[/mw_shl_code]
0×07 Chodźmy!

Podsumowanie 0×07
Podstawowy szkielet crawlera został praktycznie ukończony, w rzeczywistości wciąż jest dużo miejsca na jego pracę w wielu szczegółach, takich jak modyfikacja do obsługi logowania wsadowego, optymalizacja algorytmu wartości czerwonej obwiednicy; sam kod również powinien mieć wiele miejsc do optymalizacji, ale z moimi umiejętnościami szacuję, że mogę to osiągnąć.
Na końcu wszyscy zobaczyli efekt programu, napisałem setki linii kodu, tysiące słów artykułów, a wszystko, na co ciężko pracowałem, to po prostu zestaw dwukolorowych piłek, Nima pit dad, jak to może być dwukolorowa kula!! (Narrator: Im więcej autor mówił, tym bardziej się ekscytował, naprawdę płakał, a ludzie wokół przekonywali: Bracie, to nie tak, czy to nie jest tylko czerwona koperta Weibo? Wczoraj bolały mnie ręce i nie wytrząsnąłem czerwonej koperty z WeChat.) )

Opublikowano 14.02.2015 07:14:33 |
Ile pieniędzy zarobiłeś w Loulou?
Opublikowano 02.03.2016 13:48:27 |
Wygląda na bardzo wysoką
Opublikowano 07.03.2016 12:51:02 |
Nie wiem, czy to poważne
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com