Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 13448|Répondre: 5

Comment obtenir des enveloppes rouges de façon scientifique : À la fin de l’année, vous pouvez devenir riche et écrire un programme pour obtenir des enveloppes rouges

[Copié le lien]
Publié sur 13/02/2015 22:44:10 | | | |
0×00 Contexte

À quoi ressemblent les enveloppes rouges ? Le fils de son frère, Huer, a déclaré : « L’argent est presque comparable. Le frère et la fille Dao Yun ont dit : « Ce n’est pas aussi bon que ma tante à cause du vent. » « Tout le monde comprend le contexte, c’est le Nouvel An, et c’est le jour où des enveloppes rouges volent partout dans le ciel. Il se trouve que j’ai appris Python il y a deux jours, et j’étais plus enthousiaste, alors j’ai étudié et étudié le crawling des enveloppes rouges Weibo, pourquoi les enveloppes rouges Weibo au lieu d’Alipay, car je ne comprends que le Web, et si j’en ai l’énergie, je pourrais aussi étudier l’algorithme du « toque-taupe » à l’avenir.
Comme je suis débutant en Python, ce programme est aussi le troisième que j’ai écrit après avoir appris Python, donc s’il vous plaît, ne vous posez pas en personne s’il y a un gouffre dans le code, l’accent est mis sur l’idée, eh bien, s’il y a un gouffre dans l’idée, merci de ne pas le toucher en personne, vous voyez, IE a le pouvoir de se définir comme navigateur par défaut, écrire un article de mauvaise qualité est aussi acceptable......
J’utilise Python 2.7, et il est dit qu’il y a une grande différence entre Python 2 et Python 3.
0×01 Idées
J’étais trop paresseux pour le décrire avec des mots, alors j’ai dessiné un croquis, et tout le monde devrait pouvoir le comprendre.
Tout d’abord, l’ancienne règle : introduisez d’abord une bibliothèque dont vous ne savez pas qu’elle est utile mais dont vous ne pouvez pas vous passer :
[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] Ensuite, déclarez d’autres variables que vous devrez utiliser plus tard :

[mw_shl_code=java,true]reload(sys)sys.setdefaultencoding('utf-8&') #将字符编码置为utf-8luckyList=[] #红包列表lowest=10 #能忍受红包领奖记录最低为多少[/mw_shl_code]Une bibliothèque rsa est utilisée ici, qui n’est pas incluse par défaut dans Python. Je dois l’installer :https://pypi.python.org/pypi/rsa/

Après l’avoir téléchargé, lancez setpy.py l’installation, puis nous pourrons commencer nos étapes de développement.
0×02 Connexion Weibo
L’action de récupérer les enveloppes rouges doit être effectuée après la connexion, il doit donc y avoir une fonction de connexion, la connexion n’est pas la clé, la clé est la préservation des cookies, ici la coopération de cookielib est requise.
[mw_shl_code=java,true]cj = cookielib. CookieJar()opener = urllib2.build_opener(urllib2. HTTPCookieProcessor(cj))urllib2.install_opener(ouvre)[/mw_shl_code] De cette façon, toutes les opérations réseau utilisant l’ouvreur gèrent l’état des cookies, même si je n’en sais pas trop, mais c’est incroyable.
Ensuite, il faut encapsuler deux modules, l’un est le module d’acquisition de données, qui sert simplement à obtenir des données, et l’autre à POST-POSTER des données.
[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') retourner texte sauf 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() return text sauf Exception, e : print u’Request exception, url : '+url[/mw_shl_code] Avec ces deux modules, nous pouvons GET et POST les données, parmi lesquelles la raison pour laquelle getData décode puis encode est que sous Win7 je brouillais toujours la sortie lors du débogage, donc j’ai ajouté un peu de traitement d’encodage, ce n’est pas le but, la fonction de connexion ci-dessous est le cœur de la connexion 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) 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) clé = rsa. PublicKey(rsaPublickey,65537) message = str(servertime) +'\t'+ str(nonce) + '\n'+ str(pwd) sp = binascii.b2a_hex(rsa.encrypt(message,key)) en-tête = {'User-Agent' : 'Mozilla/5.0 (compatible ; MSIE 9.0 ; Windows NT 6.1 ; WOW64 ; Trident/5.0)'} param = { 'entrée' : '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) imprimer u »--------- Connexion réussie ! ------- « print » ----------......---------- « except Exception, e : print u » --------- connexion échouée ! ------- » imprime « ----------......---------- » exit(0)[/mw_shl_code]Les paramètres et algorithmes de chiffrement ici sont copiés d’Internet, je ne comprends pas très bien, il faut probablement demander d’abord un horodatage et une clé publique, puis le chiffrement RSA, puis traiter le traitement et le soumettre à l’interface de connexion Sina, après une connexion réussie depuis Sina, il retournera une adresse Weibo, il faut la demander pour que le statut de connexion puisse prendre pleinement effet, Après une connexion réussie, les requêtes suivantes portent le cookie de l’utilisateur actuel.
0×03 Dessin désigné de l’enveloppe rouge
Après m’être connecté avec succès à Weibo, j’ai hâte de trouver une enveloppe rouge pour essayer d’abord, bien sûr, d’abord dans le navigateur. Enfin, j’ai trouvé une page avec un bouton d’enveloppe rouge, F12 a invoqué le débogueur pour voir ce que le paquet de données demandait.

Vous pouvez voir que l’adresse de la requête est http://huodong.weibo.com/aj_hongbao/getlucky, il y a deux paramètres principaux : l’un est ouid, c’est-à-dire l’identifiant de l’enveloppe rouge, visible dans l’URL, l’autre paramètre de partage détermine s’il faut la partager avec Weibo, et il y a un _t dont je ne sais pas à quoi il sert.
D’accord, théoriquement, vous pouvez compléter l’extraction des enveloppes rouges en soumettant trois paramètres à cette URL, mais lorsque vous soumettez réellement les paramètres, vous constaterez que le serveur vous retournera magiquement une telle chaîne :
[mw_shl_code=java,vrai] {"code » :303403,"msg » :"Désolé, vous n’avez pas la permission d’accéder à cette page »,"data » :[]}[/mw_shl_code] Ne paniquez pas pour l’instant, selon mes nombreuses années d’expérience en développement web, le programmeur de l’autre partie devrait juger le référent, très simple, copier tous les en-têtes de la demande précédente.
[mw_shl_code=java,true]def getLucky(id) : #抽奖程序 print u »--- dessiner une enveloppe rouge depuis :"+str(id)+ »--- » print « ----------......---------- » if checkValue(id)==False : #不符合条件, c’est la fonction return plus tard        luckyUrl="http://huodong.weibo.com/aj_hongbao/getlucky » param={ 'ouid' :id, 'share' :0, '_t' :0 } en-tête= {                '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, comme Gecko) Chrome/33.0.1750.146 BIDUBrowser/6.x Safari/537.36', 'X-Requested-With' :'XMLHttpRequest' } res = postData(luckyUrl,param, en-tête)[/mw_shl_code] Dans ce cas, il n’y a pas de problème en théorie, mais en réalité il n’y en a pas. Après la fin de l’action de loterie, il faut juger le statut, et la résolution retournée est une chaîne json, où le code est 100000 est réussi, et si c’est 90114, c’est la limite supérieure de la loterie actuelle, et les autres valeurs sont également échouées, donc :
[mw_shl_code=java,true]hbRes=json.loads(res)if hbRes["code"]=='901114' : #今天红包已经抢完 print u »--------- a atteint la limite supérieure--------- » print « ----------......---------- » log('lucky', str(id)+'---'+str(hbRes["code"])+'---'+hbRes["data"]["title"]) exit(0)elif hbRes["code"]=='100000' :#成功 print u »---------Je vous souhaite prospérité--------- » print « ----------......---------- »        log('success',str(id)+'---'+res) exit(0) si hbRes["data"] et 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], où log est aussi une fonction que je personnalise, utilisée pour enregistrer les logs :
[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]





Précédent:Notes sur les limites maximales de téléchargement de PHP
Prochain:téléchargement de l’extension dll memcache pour PHP5.2, 5.3, 5.4, 5.5
 Propriétaire| Publié sur 13/02/2015 22:46:37 |
0×04 Parcourez la liste des enveloppes rouges
Après le test réussi d’une seule action de collecte d’enveloppes rouges, c’est le module principal de notre programme : explorer la liste d’enveloppes rouges, il devrait y avoir de nombreuses méthodes et entrées pour explorer la liste rouge, comme divers mots-clés de recherche Weibo, etc., mais j’utilise ici la méthode la plus simple : explorer la liste rouge des enveloppes.
Sur la page d’accueil (http://huodong.weibo.com/hongbao de l’activité de l’enveloppe rouge, à travers divers points supplémentaires, tout peut être observé, bien que la liste soit beaucoup connectée, elle peut être résumée en deux catégories (sauf la liste des enveloppes rouges la plus riche) : thème et classement.
En continuant à invoquer F12, analysez le format des deux pages, en commençant par une liste de formes thématiques, telles que : http://huodong.weibo.com/hongbao/special_quyu
Vous pouvez voir que l’information de l’enveloppe rouge se trouve dans une div nommée info_wrap, donc il suffit d’activer le code source de cette page, puis de récupérer tous les infowraps, et simplement de les traiter pour obtenir la liste des enveloppes rouges de cette page, ici nous devons utiliser quelques réguliers :
[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 Get info_wrap la classe régulière 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) si n==0 : retourne pour i dans la plage(n) : #traverse tous les 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')) #礼品价值 sauf Exception, e.                        info[1]=float(info[1].replace('\xd2\xda','0000000')) #礼品价值 info[2]=float(info[2].replace('\xcd\xf2','0000')) #已发送 if info[2]==0 : info[2]=1 #防止除数为0 si info[1]==0 : info[1]=1 #防止除数为0 info.append(info[0]/(info[2]+info[1])) #红包价值, espèces/(nombre de réclamés + valeur du prix) # si info[0]/(info[2]+info[1])>100 :                # print url luckyList.append(info) si 'class="page"' en html :#存在下一页 p=p+1 getThemeList(url,p) #递归调用自己爬取下一页[/mw_shl_code]Il est tellement difficile de dire que c’est si difficile, et il m’a fallu beaucoup de temps pour écrire ces deux phrases. Il y a aussi une information dans l’annexe ici [4], qui est mon algorithme pour juger approximativement la valeur des enveloppes rouges, pourquoi faire cela ? Car il y a beaucoup d’enveloppes rouges mais nous ne pouvons tirer que quatre fois, dans cette vaste mer de sacs, nous devons trouver les enveloppes rouges les plus précieuses puis les tirer, voici trois données à titre de référence : valeur en espèces, valeur offerte et nombre de bénéficiaires, évidemment si l’argent est faible et que le nombre de personnes recevant beaucoup de personnes ou la valeur du prix est très élevée (certaines sont même folles en unités de centaines de millions), Alors ça ne vaut pas la peine de la prendre, alors j’ai attendu longtemps et j’ai finalement mis au point un algorithme pour mesurer le poids des enveloppes rouges : valeur de l’enveloppe rouge = argent / (nombre de bénéficiaires + valeur du prix).
Le principe de la page du classement est le même : trouvez les tags clés et les associez régulièrement.
[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 Obtenez list_info la classe régulière 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) si n==0 : retourne pour i dans la plage(n) : #Iterate à travers tous les info_wrap div s=pInfo.match(List) #取得红包信息 topinfo=list(s.groups(0))                info=liste(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')) #礼品价值 sauf Exception, e.                        info[1]=float(info[1].replace('\xd2\xda','0000000')) #礼品价值 info[2]=topinfo[0].replace('\xb8\xf6','') #个->'' info[2]=float(info[2].replace('\xcd\xf2','0000')) #已发送                if info[2]==0 : info[2]=1 #防止除数为0 si info[1]==0 : info[1]=1 #防止除数为0 info.append(info[0]/(info[2]+info[1])) #红包价值, espèces/(nombre de bénéficiaires + valeur de cadeau)                # if info[0]/(info[2]+info[1])>100 : # imprimer l’URL luckyList.append(info) si 'class="page"' en html :#存在下一页 p=p+1                getTopList(url,daily,p) #递归调用自己爬取下一页[/mw_shl_code]D’accord, nous pouvons maintenant explorer avec succès la liste des deux pages spéciales, et l’étape suivante est d’obtenir la liste des listes, c’est-à-dire la collection de toutes ces adresses de listes, puis de les récupérer une par une :
[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=', 'vêtements' :'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'                } pour (theme,url) dans themeUrl.items() : print « ----------« +theme+ »---------- » print url print « ----------......---------- »                getThemeList(url,1) pour (top,url) dans topUrl.items() : print « ----------« +top+ »---------- » print url print « ----------......---------- »                getTopList(url,0,1) getTopList(url,1,1)[/mw_shl_code]
 Propriétaire| Publié sur 13/02/2015 22:47:13 |
0×05 Jugez la disponibilité des enveloppes rouges
C’est relativement simple : d’abord chercher des mots-clés dans le code source pour voir s’il y a un bouton rouge pour attraper l’enveloppe, puis aller dans le classement de la collection pour voir quel est le record le plus élevé, si le plus grand ne reçoit que quelques dollars, au revoir......
L’adresse pour consulter l’enregistrement de collecte est http://huodong.weibo.com/aj_hongbao/detailmore?page=1&type=2&_t=0&__rnd=1423744829265&uid=Red Enveloppe ID

[mw_shl_code=java,true]def checkValue(id) : infoUrl='http ://huodong.weibo.com/hongbao/'+str(id) html=getData(infoUrl) if 'action-type="lotery"' en html ou 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, comme 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 Obtenez tous list_info réguliers luckyLog=pMoney.findall(html,re. DOTALL) si len(luckyLog)==0 : maxMoney=0 sinon : maxMoney=float(luckyLog[0]) si maxMoney <le plus bas : #记录中最大红包小于设定值 retourner Faux sinon : imprimer u »--------- main ralentit--------- » imprimer « ----------......---------- » retourner faux        retour Vrai[/mw_shl_code]0×06 Travaux de finition
Les modules principaux sont déjà en place, et maintenant toutes les étapes doivent être reliées en série :
[mw_shl_code=java,true]def start(username,password,low,fromFile) : gl=False lowest=low login(nom d’utilisateur, mot de passe) if fromfile=='y' : if os.path.exists('luckyList.txt') :                         try : f = fichier('luckyList.txt') newList = [] newList = p.load(f)                                print u'--------- load list---------' print « ----------......---------- » sauf Exception, e : print u' a échoué à analyser la liste locale, ce qui a permis de parcourir la page en ligne. ' print « ----------......---------- » gl=True else : print u' n’existe pas localement luckyList.txt des pages en ligne explorantes. ' print « ----------......---------- » gl=True if gl==True : getList() from operator import itemgetter                newList=sorted(luckyList, key=itemgetter(4),reverse=True) f = file('luckyList.txt', 'w') p.dump(newList, f) #把抓到的列表存到文件里, donc vous n’avez pas besoin d’attraper f.close() pour lucky la prochaine fois newList : si ce n’est pas 'http://huodong.weibo.com' dans lucky[3] : #不是红包 continue d’imprimer lucky[3] id = re.findall(r'(\w*[0-9]+)\w*',lucky[3])                getLucky(id[0])[/mw_shl_code] Comme il est très compliqué de parcourir la liste des enveloppes rouges à chaque fois qu’elle est testée, j’ai ajouté un paragraphe pour déposer la liste complète dans le code du fichier, afin que vous puissiez lire la liste locale et récupérer l’enveloppe rouge à l’avenir.
[mw_shl_code=java,true]if __name__ == « __main__ » : print u »------------------ Weibo Red Envelope Assistant------------------ » print « ---------------------v0.0.1--------------------- » print u »------------- par @***---------------- » Imprimez « ------------------------------------------------- » Essayez : uname=raw_input(u"Veuillez entrer votre compte Weibo : « .decode('utf-8').encode('GBK'))                pwd=raw_input(u"Veuillez entrer votre mot de passe Weibo : « .decode('utf-8').encode('gbk')) low=int(raw_input(u"Enveloppe rouge pour recevoir le maximum d’argent supérieur à n : « .decode('utf-8').encode('gbk')))) fromfile=raw_input(u) Utiliser la liste d’enveloppes rouges dans le luckyList.txt : (y/n) « .decode('utf-8').encode('gbk')) sauf Exception, e : print u » parameter error » print « ----------......---------- » print e                exit(0) imprimer u »--------- démarrer le programme--------- » imprimer « ----------......---------- » démarrer (uname,pwd,low, fromfile) imprimer u » fin --------- programme--------- « imprimer « ----------...... ----------" os.system('pause')[/mw_shl_code]
0×07 Allons-y !

Résumé 0×07
Le squelette de base du crawler est quasiment terminé, en fait, il reste encore beaucoup de place pour que ce crawler joue dans de nombreux détails, comme le modifier pour supporter la connexion batch, optimiser l’algorithme de valeur de l’enveloppe rouge, le code lui-même devrait aussi avoir beaucoup d’endroits à optimiser, mais avec mes capacités, j’estime que je peux y arriver.
Au final, tout le monde a vu le résultat du programme, j’ai écrit des centaines de lignes de code, des milliers de mots d’articles, et tout ce que j’ai travaillé dur pour obtenir, c’est juste un jeu de balles bicolores, Nima pit papa, comment ça pourrait être une boule bicolore !! (Narrateur : Plus l’auteur parlait, plus il s’excitait, et il pleurait vraiment, et les gens autour de lui persuadaient : Frère, ce n’est pas ça, ce n’est pas juste une enveloppe rouge Weibo, hier j’avais mal aux mains, et je n’ai pas sorti une enveloppe rouge WeChat.) )

Publié sur 14/02/2015 07:14:33 |
Combien d’argent as-tu ramassé à Loulou ?
Publié sur 02/03/2016 13:48:27 |
On dirait si grand
Publié sur 07/03/2016 12:51:02 |
Je ne sais pas si c’est grave
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com