이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 13448|회답: 5

과학적으로 붉은 봉투를 잡는 방법: 연말에 부자가 되어 빨간 봉투를 잡는 프로그램을 만들 수 있습니다

[링크 복사]
게시됨 2015. 2. 13. 오후 10:44:10 | | | |
0×00 배경

빨간 봉투는 어떤가요? 그의 형제의 아들 후어는 "돈이 거의 비슷하다. 형제와 딸 다오윈이 말했다, "바람 때문에 이모만큼 좋지 않아." "모두가 배경을 이해하지, 오늘은 새해고, 빨간 봉투가 하늘을 가득 날리는 날이야. 마침 이틀 전에 파이썬을 배웠고, 더 신나서 웨이보 홍봉투 기어 다니는 법을 계속 공부했어요. 왜 알리파이 홍봉투 대신 웨이보 홍봉투를 썼는지, 웹만 이해하고, 에너지가 있으면 나중에 두더지 잡기 알고리즘도 공부할지도 모르겠다고 생각했어요.
저는 파이썬 초보자이기 때문에, 이 프로그램은 파이썬을 배운 후 세 번째로 작성한 프로그램이기도 합니다. 그래서 코드에 구멍이 있으면 직접 파고들지 말아 주세요. 초점은 아이디어에 있습니다. 만약 아이디어에 구멍이 있다면, 직접 파고들지 마세요. IE는 기본 브라우저로 스스로 설정할 수 있는 페이스가 있고, 쓰레기 기사를 쓰는 것도 괜찮습니다......
저는 Python 2.7을 사용하는데, Python 2와 Python 3 사이에 큰 차이가 있다고 합니다.
0×01 아이디어
말로 설명하기가 너무 귀여워서 스케치를 그렸고, 모두가 이해할 수 있을 거라고 생각했어요.
우선, 옛날 규칙입니다. 먼저 유용한지는 모르지만 없으면 안 되는 라이브러리를 소개하는 것입니다:
[mw_shl_code=java,true]import re, urlib, urllib2, cookieliv, base64, binascii, os, json, json, sys, cPickle, as p import, rsa[/mw_shl_code] 그 다음 나중에 사용해야 할 다른 변수들을 선언하세요:

[mw_shl_code=java,true]reload(sys)sys.setdefaultencoding('utf-8&') #将字符编码置为utf-8luckyList=[] #红包列表lowest=10 #能忍受红包领奖记录最低为多少[/mw_shl_code]여기에는 기본적으로 Python에 포함되지 않은 RSA 라이브러리가 사용됩니다. 설치해야 해요 :https://pypi.python.org/pypi/rsa/

다운로드를 마치고 설치 setpy.py 실행한 후 개발 단계를 시작할 수 있습니다.
0×02 웨이보 로그인
빨간 봉투를 집는 동작은 로그인 후에 수행되어야 하므로 로그인 기능이 있어야 하며, 로그인이 핵심이 아니라 쿠키 보존이 핵심이며, 여기서는 cookielib의 협력이 필요합니다.
[mw_shl_code=java, true]cj = cookielib. CookieJar()opener = urllib2.build_opener(urllib2. HTTPCookieProcessor(cj))urllib2.install_opener(opener)[/mw_shl_code] 이렇게 하면 오프너를 사용하는 모든 네트워크 작업이 쿠키 상태를 처리합니다. 저는 잘 모르지만 정말 훌륭합니다.
다음으로, 두 개의 모듈을 캡슐화해야 합니다. 하나는 데이터 수집 모듈로, 단순히 데이터를 얻는 데 사용하고, 다른 하나는 데이터를 POST 처리하는 데 사용됩니다.
[mw_shl_code=java,true]def getData(url) : try: req = urllib2. Request(url) 결과 = opener.open(req) text = result.read() text=text.decode("utf-8").encode("gbk",'ignore') 텍스트는 예외를 제외하고 반환됩니다. 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) 결과 = opener.open(req) text = result.read() 예외를 제외한 텍스트 반환, e: print u'request exception, url: '+url[/mw_shl_code] 이 두 모듈로 데이터를 얻고 POST할 수 있는데, getData가 디코딩 후 인코딩하는 이유는 Win7에서 디코딩할 때 출력이 항상 뒤섞여서 인코딩 처리를 추가했기 때문입니다. 이게 핵심은 아니고, 아래 로그인 기능은 웨이보 로그인의 핵심입니다.
[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)) 헤더 = {'User-Agent' : 'Mozilla/5.0 (호환; 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"--------- 로그인 성공! "print" ----------......---------- "예외 제외, e: print u" ------- 로그인 실패--------- -------" print "----------......----------" exit(0)[/mw_shl_code]이 문서의 매개변수와 암호화 알고리즘은 인터넷에서 복사한 것이고, 잘 이해가 안 됩니다. 아마도 먼저 타임스탬프와 공개키를 요청한 뒤, RSA 암호화를 거쳐 처리를 처리한 뒤 Sina 로그인 인터페이스에 제출하는 방식일 것입니다. Sina에서 성공적으로 로그인하면 웨이보 주소를 반환합니다. 로그인 상태가 완전히 발효되도록 요청해야 합니다. 로그인이 성공적으로 이루어진 후, 이후 요청은 현재 사용자의 쿠키를 전달하게 됩니다.
0×03 지정 빨간 봉투 추첨
웨이보에 성공적으로 로그인한 후, 우선 브라우저에서 빨간 봉투를 찾아서 먼저 시도해보고 싶어 정말 기대됩니다. 마침내 빨간 봉투 버튼이 있는 페이지를 발견했고, F12가 디버거를 호출해 데이터 패킷이 무엇을 요청하는지 확인했습니다.

요청 주소가 http://huodong.weibo.com/aj_hongbao/getlucky 있고, 두 가지 주요 매개변수가 있는데, 하나는 ouid, 즉 빨간 봉투 ID로, URL에서 확인할 수 있습니다. 다른 하나는 공유 매개변수로 웨이보에 공유할지 여부를 결정하며, _t 용도는 모르겠습니다.
이론적으로는 이 URL에 세 가지 매개변수를 제출하면 빨간 봉투 추출을 완료할 수 있지만, 실제로 매개변수를 제출하면 서버가 마법처럼 다음과 같은 문자열을 반환해 줍니다:
[mw_shl_code=자바, 참] {"code":303403,"msg":"죄송하지만, 이 페이지에 접근할 권한이 없습니다","data":[]}[/mw_shl_code] 지금 당황하지 마세요. 제 다년간의 웹 개발 경험에 따르면, 상대방 프로그래머가 참조자를 판단해야 합니다. 아주 간단합니다. 과거 요청의 모든 헤더를 복사하는 것뿐입니다.
[mw_shl_code=java,true]def getLucky(id): #抽奖程序 print u"--- draw red envelope from:"+str(id)+"---" print "----------......----------" checkValue(id)==False: #不符合条件, 이것은 나중에 반환하는 함수입니다        luckyUrl="http://huodong.weibo.com/aj_hongbao/getlucky" param={ 'ouid':id, 'share':0, '_t':0 } 헤더= {                '캐시-제어':'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, Gecko처럼) Chrome/33.0.1750.146 BIDUBrowser/6.x Safari/537.36', 'X-Requested-With':'XMLHttpRequest' } res = postData(luckyUrl,param, 헤더)[/mw_shl_code] 이 경우 이론상은 문제가 없지만, 실제로는 문제가 없습니다. 복권 액션이 완료된 후에는 상태를 판단해야 하며, 반환된 res는 json 문자열입니다. 여기서 코드가 100000이면 성공이고, 90114이면 오늘 복권의 상한선이며, 다른 값들도 실패한 것입니다. 따라서 다음과 같습니다:
[mw_shl_code=java,true]hbRes=json.loads(res)if hbRes["code"]=='901114': #今天红包已经抢完 print u"---------가 상한에 도달했습니다---------" print "----------......----------" log('lucky', str(id)+'---'+str(hbRes["code"])+'---'+hbRes["data"]["title"]) exit(0)elif hbRes["code"]=='100000':#成功 print u"---------번영을 기원합니다---------" print "----------......----------"        log('success',str(id)+'---'+res) exit(0) 만약 hbRes["data"] and 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], 여기서 log는 제가 커스터마이즈하는 함수로, 로그를 기록하는 데 사용됩니다:
[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]





이전의:PHP 업로드 최대 제한에 관한 노트
다음:PHP5.2, 5.3, 5.4, 5.5용 memcache dll 확장 프로그램 다운로드
 집주인| 게시됨 2015. 2. 13. 오후 10:46:37 |
0×04 빨간 봉투 목록을 쭉 훑어보세요
단일 홍봉 수집 동작을 성공적으로 테스트한 후, 이 모듈은 우리 프로그램의 핵심 빅 무브 모듈입니다 - 홍봉 목록을 크롤링하는 것에는 다양한 웨이보 검색 키워드 등 다양한 방법과 입구가 있어야 하지만, 저는 여기서 가장 간단한 방법인 홍봉투 목록을 크롤링합니다.
홈페이지(빨간 봉투 활동 http://huodong.weibo.com/hongbao 에서 여러 지점을 통해 모두 관찰할 수 있지만, 목록은 많이 연결되어 있지만 두 가지 범주로 요약할 수 있습니다(가장 풍부한 빨간 봉투 목록은 제외): 주제와 리더보드.
F12를 계속 소환하며, 두 페이지의 형식을 분석하세요. 우선 주제별 형태 목록부터 시작하세요: http://huodong.weibo.com/hongbao/special_quyu
빨간 봉투의 정보가 info_wrap이라는 이름의 div에 있다는 것을 알 수 있어서, 이 페이지의 소스 코드를 활성화하고 모든 인포랩을 가져와서 간단히 처리하면 이 페이지의 빨간 봉투 목록을 얻을 수 있습니다. 여기서는 몇 가지 정규 토큰을 사용해야 합니다:
[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 info_wrap일반 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) n=0 경우: range(n) 내 i에 대해 반환: #traverse 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'))) #礼品价值 예외를 제외하고, e:                        info[1]=float(info[1].replace('\xd2\xda','000000000')) #礼品价值 info[2]=float(info[2].replace('\xcd\xf2','0000')) #已发送 ifif[2]==0: info[2]=1 #防止除数为0 info[1]==0 if info[1]=0: info[1]=1 #防止除数为0 info.append(info[0]/(info[2]+info[1])) #红包价值, cash/(수령자 수 + 상금 가치) # if info[0]/(info[2]+info[1])>100:                # html:#存在下一页 'class="page"' 경우 URL rcyList.append(info) p=p+1 getThemeList(url,p) #递归调用自己爬取下一页[/mw_shl_code]이렇게 어렵다고 말하기가 너무 어렵고, 이 두 문장을 쓰는 데 오랜 시간이 걸렸습니다. 여기 정보 부록 [4]에도 정보가 있는데, 이는 제가 만든 법으로, 빨간 봉투의 가치를 대략적으로 판단하는 알고리즘입니다. 왜 이런 걸 하는지, 빨간 봉투는 많지만 우리는 네 번만 뽑을 수 있기 때문입니다. 수많은 봉투 중에서 가장 가치 있는 빨간 봉투를 찾아서 뽑아야 합니다. 참고용 세 가지 데이터가 있습니다: 현금 가치, 선물 가치, 그리고 수령자 수. 물론 현금이 적고 많은 사람을 받는 사람이나 상품 가치가 매우 높다면(어떤 경우는 수억 단위로 엄청나게 크기도 합니다), 그럼 잡을 가치가 없어서 오랫동안 참다가 결국 빨간 봉투 무게를 측정하는 알고리즘을 만들었어요: 빨간 봉투 가치 = 현금 / (수령자 수 + 상금 가치).
리더보드 페이지의 원칙은 동일합니다. 키 태그를 찾아서 정기적으로 매칭하는 것입니다.
[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) list_info#h 일반 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) n==0 경우: range(n) 내에서 i에 대해 반환#Iterate 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')) 예외를 제외한 #礼品价值                        info[1]=float(info[1].replace('\xd2\xda','000000000')) #礼品价值 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])) #红包价值, 현금/(수령인 수 + 선물 가치)                # if info[0]/(info[2]+info[1])>100: # html:#存在下一页 p=p+1 if luckyList.append(info) URL print luckyList.append(info)                getTopList(URL, daily, p) #递归调用自己爬取下一页[/mw_shl_code]좋아요, 이제 두 개의 특수 페이지 목록을 성공적으로 크롤할 수 있고, 다음 단계는 리스트 목록, 즉 이 모든 리스트 주소들의 집합을 얻은 후 하나씩 가져옵니다:
[mw_shl_code=java,true]def getList(): print u"---------Find target---------" print "----------......----------" themeUrl={ #主题列表 'theme':'http://huodong.weibo.com/hongbao/theme',                 '핀파이':'http://huodong.weibo.com/홍보/special_pinpai', '다카':'http://huodong.weibo.com/홍보/special_daka', '유쉬안':'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', '허즈오':'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',                '가장 많은 파트너':'http://huodong.weibo.com/hongbao/top_mostsendpartner', 'cate':'http://huodong.weibo.com/hongbao/cate?type=', 'clothes':'http://huodong.weibo.com/ 홍바오/케이트?type=clothes', '아름다움':'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', '디지털':'http://huodong.weibo.com/hongbao/cate?type=digital', 'other':'http://huodong.weibo.com/hongbao/cate?type=other'                } themeUrl.items(): print "----------"+theme+""----------" print url print "----------......----------"                getThemeList(url,1) for (top,url) in topUrl.items(): print "----------"+top+"----------" print url print print "----------......----------"                getTopList(url,0,1) getTopList(url,1,1)[/mw_shl_code]
 집주인| 게시됨 2015. 2. 13. 오후 10:47:13 |
0×05 빨간 봉투 사용 가능 여부를 판단해
이건 비교적 간단합니다. 먼저 소스 코드에서 키워드를 검색해 빨간 봉투 잡기 버튼이 있는지 확인하고, 컬렉션 순위로 가서 가장 높은 기록을 확인하는데, 만약 가장 많은 사람이 몇 달러만 받으면 그만두는 겁니다......
수집 기록을 확인할 수 있는 주소는 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) 만약 'action-type="lottery"'가 html 또는 True: #存在抢红包按钮                logUrl="http://huodong.weibo.com/aj_hongbao/detailmore?page=1&type=2&_t=0&__rnd=1423744829265&uid="+id #查看排行榜数据 param={} 헤더= { '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, like 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 모든 단골 list_info 모으세요 luckyLog=pMoney.findall(html,re. DOTALL) 만약 len(luckyLog)==0: maxMoney=0 그렇지 않으면 maxMoney=float(luckyLog[0]) 만약 maxMoney <최저: #记录中最大红包小于设定值 반환 false 그렇지 않다: print u"--------- 손이 느려진다---------" print "----------......----------" return false        진실[/mw_shl_code]0×06 마무리 작업
주요 모듈들은 이미 설치되어 있으며, 이제 모든 단계를 직렬로 연결해야 합니다:
[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 "----------......----------" 예외를 제외하고, e: print u'가 로컬 리스트를 파싱하지 못해 온라인 페이지를 크롤링하는 데 실패했습니다. ' print "----------......----------" gl=참 아니면 print u'는 온라인 페이지를 크롤링luckyList.txt 로컬에 존재하지 않습니다. ' 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) #把抓到的列表存到文件里 따라서 다음번에는 행운을 얻기 위해 f.close()를 잡을 필요가 없습니다 newList: Lucky[3]에서 'http://huodong.weibo.com'가 아니면: #不是红包 계속 print lucky[3] id=re.findall(r'(\w*[0-9]+)\w*',lucky[3])                getLucky(id[0])[/mw_shl_code] 테스트할 때마다 빨간 봉투 목록을 반복해서 크롤링하는 것이 매우 번거로워서, 전체 목록을 파일 코드에 담아내는 단락을 추가해 나중에 로컬 목록을 읽고 빨간 봉투를 가져올 수 있도록 했습니다.
[mw_shl_code=java,true]if __name__ == "__main__": print u"------------------ 웨이보 홍봉 어시스턴트------------------" print "---------------------v0.0.1---------------------" print u"------------- @***----------------" 인쇄 "-------------------------------------------------" 시도: uname=raw_input(u"웨이보 계정을 입력해 주세요: ".decode('utf-8').encode('gbk')))                pwd=raw_input(u"웨이보 비밀번호를 입력해 주세요: ".decode('utf-8').encode('gbk')) low=int(raw_input(u"n보다 큰 최대 현금을 받는 레드 엔벨로프: ".decode('utf-8').encode('gbk'))) fromfile=raw_input(u) luckyList.txt에서 빨간 봉투 목록을 사용할 것인지: (y/n) ".decode('utf-8').encode('gbk')) 예외를 제외하고, e: print u" parameter error" print "----------......----------" print e                exit(0) print u"--------- 프로그램 시작---------" print "----------......----------" start(uname, pwd, low, fromfile) print u" --------- 프로그램 종료--------- "print "----------...... ----------" os.system('pause')[/mw_shl_code]
0×07 가자!

0×07 요약
기본 크롤러 뼈대는 기본적으로 완성되었고, 사실 이 크롤러가 일괄 로그인 지원에 맞게 수정하거나, 빨간 봉투 값 알고리즘 최적화 등 여러 세부 사항을 활용할 여지가 많습니다. 코드 자체에도 최적화할 부분이 많을 텐데, 제 능력으로는 충분히 할 수 있을 것 같습니다.
결국 모두가 프로그램의 결과를 봤고, 저는 수백 줄의 코드와 수천 단어의 기사를 썼지만, 제가 열심히 만든 것은 단지 두 가지 색깔 공 세트뿐이었어요. 니마 피트 아빠, 어떻게 이게 두 가지 색깔 공일 수 있겠어요!! (내레이터: 작가가 말할수록 점점 더 흥분했고, 실제로 울었으며, 주변 사람들은 설득했다: 형, 그런 게 아니야, 그냥 웨이보 홍보 봉투 아니야? 어제 손이 아팠는데 위챗 봉투도 안 꺼냈어.) )

게시됨 2015. 2. 14. 오전 7:14:33 |
루루에서 얼마 챙겼어?
게시됨 2016. 3. 2. 오후 1:48:27 |
키가 엄청 커 보인다
게시됨 2016. 3. 7. 오후 12:51:02 |
심각한지는 잘 모르겠어요
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com