def getTryProductList(allTryProducts, user, prop, page): url = 'https://try.jd.com/activity/getActivityList?page={0}&activityType=1&activityState=0&cids={1}'.format( page, prop["cids"]) user["headers"].update({ "Host": "try.jd.com", "Referer": url }) totalPage = 1 try: response = request.openUrl(url, user, {}) # logger.info("all try product url:{0}".format(url)) content = str(response.read(), 'utf-8') # logger.info("html content response:{0}".format(content)) soup = BeautifulSoup(content, "html.parser") for result in soup.find_all('li', {"class": "item"}): # logger.info("result:{0}".format(result)) # time.sleep(1) activityId = result.get("activity_id") # logger.info("activityId:{0}".format(activityId)) if activityId is not None: allTryProducts.append(activityId) logger.info("账户:{0}获取到所有试用产品如下:{1}".format(user["phone"],allTryProducts)) for result in soup.find_all('span', {"class": "p-skip"}): totalPage = int(result.em.b.get_text(strip=True)) logger.info("账户:{0}中url:{1}总页数:{2}".format(user["phone"], url, totalPage)) except Exception as ex: logger.error("账户:{0}获取已申请试用产品时报错, 产品url:{1}, message:{2}".format(user["phone"],url, ex)) return totalPage
def signFreeBeautyTry(prod, user): url = 'https://i.meituan.com/beauty-salvia/try-center/tryresult.html' params = { "token": user["token"], "longitude": "*", "lng": "*", "latitude": "*", "lat": "*", "dpid": "", "channel": "10", "category": "0", "catid": "22", "utm_source": "rb", "cityid": "30", "ci": "30", "mina_name": "", "productid": prod["id"], "source": "", "shopid": prod.get("shopId", ''), "mobile": user["phone"], "utm_source": "rb", "utm_medium": "iphone", "f": "iphone", "version_name": "10.0.601", "regionid": "", "mina_name": "" } queryParams = urllib.parse.urlencode(params) fetchUrl = "?".join([url, queryParams]) response = request.openUrl(fetchUrl, user, {}) content = response.read() soup = BeautifulSoup(content, "html.parser") for result in soup.find_all('div', {"class": "result-text"}): logger.info(prod["name"] + ': ' + result.get_text(strip=True))
def getFreeBeautyTryList(user): url = 'https://m.dianping.com/beautytry/productlist?channel=1&category=0&period=0&cityid=7&longitude=%2A&latitude=%2A&dpid=%2A&type=0' response = request.openUrl(url, user, {}) content = response.read() decodeContent = json.loads(content) prodList = [] for prod in decodeContent["data"]["goodProductList"]: if (prod["hasRegister"] == False): prodList.append({"id": prod["id"], "name": prod["name"]}) logger.info('-----获取以下未申请的免费试用,总数:{0}---\n{1}'.format( len(prodList), prodList)) shopList = [] for shop in decodeContent["data"]["experienceProductList"]: if (shop["hasRegister"] == False): shopList.append({ "id": shop["id"], "name": shop["simpleName"], "price": shop["price"] }) logger.info('-----获取以下未申请的0元探新店产品试用,总数:{0}---\n{1}'.format( len(shopList), shopList)) return prodList, shopList
def getShopDetail(prod, user): url = 'https://m.dianping.com/beautytry/productlist/detail' params = { "channel": 1, "category": 0, "userid": '', "longitude": '', "latitude": '', "dpid": '', "productid": prod["id"], "productbackendid": 0, "cityid": 7, "utm_source": 'rb' } fetchUrl = "?".join([url, urllib.parse.urlencode(params)]) user["headers"].update({ "Host": "m.dianping.com", "Referer": fetchUrl + '&businesskey=', "Upgrade-Insecure-Requests": "1", "DNT": "1" }) response = request.openUrl(fetchUrl, user, {}) jsondata = json.loads(response.read()) shop = jsondata["data"]["selectShop"] prod.update({"shopId": shop["shopId"], "shopType": shop["shopType"]})
def getFollowList(user): url = 'https://t.jd.com/follow/vender/qryCategories.do?qryKey=&_={0}'.format( time.time()) follows = [] setHeader(user) try: response = request.openUrl(url, user, {}) content = str(response.read(), 'utf-8') decodeContent = json.loads(content) if decodeContent.__contains__("data"): # logger.info(decodeContent) for category in decodeContent.get("data", []): for entry in category["entityIdSet"]: follows.append(entry) else: # logger.error(decodeContent) if (decodeContent.get("error", "") == "NotLogin"): user["token"] = "" config.saveUserConfig(user) logger.info("clear token and save to config file") except Exception as ex: logger.error("账户:{0}获取店铺关注列表报错, url:{1},错误信息:{2}".format( user["phone"], url, ex)) logger.info("账户:{0}关注店铺总数:{1}, 具体如下:{2}".format(user["phone"], len(follows), follows)) return follows
def signFreeBeautyTry(prod, user): url = 'https://m.dianping.com/beauty-salvia/try-center/tryresult.html' params = { "token": user["token"], "longitude": "*", "lng": "*", "latitude": "*", "lat": "*", "dpid": "*", "channel": "1", "category": "0", "catid": "50", "utm_source": "rb", "cityid": "7", "ci": "", "mina_name": "", "productid": prod["id"], "source": "", "shopid": prod.get("shopId", ''), "mobile": user["phone"] } queryParams = urllib.parse.urlencode(params) fetchUrl = "?".join([url, queryParams]) user["headers"].update({ "Host": "m.dianping.com", "Referer": fetchUrl, "Upgrade-Insecure-Requests": "1", "DNT": "1" }) response = request.openUrl(fetchUrl, user, {}) content = response.read() soup = BeautifulSoup(content, "html.parser") for result in soup.find_all('div', {"class": "result-text"}): logger.info(prod["name"] + ': ' + result.get_text(strip=True))
def getShopDetail(prod, user): url = 'https://i.meituan.com/beautytry/productlist/detail' params = { "channel": 10, "category": 0, "userid": '', "longitude": '', "latitude": '', "dpid": '', "productid": prod["id"], "productbackendid": 0, "cityid": 30, "utm_source": 'rb' } fetchUrl = "?".join([url, urllib.parse.urlencode(params)]) response = request.openUrl(fetchUrl, user, {}) content = response.read() if b'<!DOCTYPE html>' in content: logger.debug('reponse content is html') # logger.debug(content) return jsondata = json.loads(content) shopId = getShopId(jsondata) shop = jsondata["data"]["selectShop"] prod.update({"shopId": shopId, "shopType": shop["shopType"]}) logger.info(prod)
def getVendorByProductId(user, prodId): url = 'http://try.jd.com/migrate/getActivityById?id={0}'.format(prodId) user["headers"].update({ "Referer": url, "Host": "try.jd.com" }) try: response = request.openUrl(url, user, {}) content = str(response.read(), 'utf-8') # logger.info("vendor response content:{0}".format(content)) decodeContent = json.loads(content) if "data" not in decodeContent: return 0 shopInfo = decodeContent["data"]["shopInfo"] logger.info("账户:{0}获取店铺信息:{1}".format(user["phone"], shopInfo)) shopId = shopInfo["shopId"] # logger.info("shop id:{0}".format(shopId)) return shopId except Exception as ex: logger.error(ex) return 0
def hottryapply(user): logger.info("热门试用产品开始申请") url = 'http://try.jd.com' user["headers"].update({ "Host": "try.jd.com", "Referer": url }) try: response = request.openUrl(url, user, {}) logger.info("opening web") content = str(response.read(), 'utf-8') soup = BeautifulSoup(content, "html.parser") hottryprods = [] for result in soup.find_all('li', {"class": "ui-switchable-panel"}): activityId = result.get("activity_id") if (not activityId is None): hottryprods.append(activityId) logger.info("user:{1}热门试用产品:{0}".format(hottryprods, user["phone"])) for prodId in hottryprods: vendorId = getVendorByProductId(user, prodId) followVendor(user, vendorId) applyTryProduct(user, prodId) except Exception as ex: logger.error("账户:{0}获取已申请试用产品时报错, 产品url:{1}, message:{2}".format(user["phone"],url, ex)) logger.info("账户:{0}热门试用产品结束申请".format(user["phone"]))
def getAlreadyApplyTryProduct(allTryProducts, user): prodIds = ','.join(allTryProducts) url = 'https://try.jd.com/user/getApplyStateByActivityIds?activityIds={0}'.format( prodIds) user["headers"].update({ "Referer": url }) result = [] try: response = request.openUrl(url, user, {}) content = str(response.read(), 'utf-8') decodeContent = json.loads(content) for item in decodeContent: result.append(item["activityId"]) # logger.info(result) except Exception as ex: logger.error("获取已申请试用产品报错, url:{0}".format(url)) logger.error(content) logger.error(ex) return result
def checkin(config): setQueryHeader(config) logger.info(config) url = 'https://zhiyou.smzdm.com/user/checkin/jsonp_checkin' response = request.openUrl(url, config, {}) content = response.read().decode('utf-8') logger.info("张大妈签到结果:{0}".format(content))
def followVendor(user, venderId): url = 'http://try.jd.com/migrate/follow?_s={0}&venderId={1}'.format('pc', venderId) user["headers"].update({ "Referer": url }) response = request.openUrl(url, user, {}) content = str(response.read(), 'utf-8') decodeContent = json.loads(content) logger.info("账户:{0}关注店铺结果:{1}".format(user["phone"], decodeContent))
def checkin(user): config.getConfig(user) url = 'https://m.dianping.com/mobile/event/arro/checkin' setQueryHeader(user) response = request.openUrl(url, user, {}) content = response.read() content = str(content, 'utf-8') logger.info("霸王餐签到结果:{0}".format(content)) checkLoginStatus(user, content)
def removeFollow(user, vendor): url = 'https://t.jd.com/follow/vender/unfollow.do?venderId={0}&_={1}'.format( vendor, time.time()) setHeader(user) try: response = request.openUrl(url, user, {}) content = str(response.read(), 'utf-8') # decodeContent = json.loads(content) logger.info(content) except Exception as ex: logger.error("user:{1}取消店铺关注列表报错, url:{0}".format(url, user["phone"])) logger.error(ex)
def applyTryProduct(user, prodId): url = 'https://try.jd.com/migrate/apply?activityId={0}&source=0'.format(prodId) user["headers"].update({ "Referer": url }) response = request.openUrl(url, user, {}) content = str(response.read(), 'utf-8') decodeContent = json.loads(content) logger.info("账户:{0}申请试用产品:{1}, 结果:{2}".format(user["phone"],prodId, decodeContent)) status = decodeContent["code"] if (status == '-131'): errMsg = '账户:{0}申请试用已达到当天限制次数'.format(user["phone"]) raise Exception(errMsg) if (status == '-600'): user["token"] = "" config.saveUserConfig(user) logger.info("清除token并保存到用户配置文件中") raise Exception("账户:{0}请先登录".format(user["phone"]))
def applyTryProduct(user, prodId): url = 'https://try.jd.com/migrate/apply?activityId={0}&source=0'.format( prodId) user["headers"].update({ "Referer": url }) response = request.openUrl(url, user, {}) content = str(response.read(), 'utf-8') decodeContent = json.loads(content) logger.info("user:{2}apply product id:{0}, result:{1}".format(prodId, decodeContent, user["phone"])) status = decodeContent["code"] if (status == '-131'): raise Exception('user:{0}apply times is limited'.format(user["phone"])) if (status == '-600'): user["token"] = "" config.saveUserConfig(user) logger.info("clear token and save to user config file") raise Exception("user:{0}please login first".format(user["phone"]))
def getFreeTryList(user): url = 'https://m.dianping.com/beautytry/fun/productlist?channel=16&category=0&cityid=7&longitude=0&latitude=&env=0' response = request.openUrl(url, user, {}) content = json.loads(response.read()) data = content["data"] prodList = [] for item in data: propItems = data[item] if (isinstance(propItems, list)): for prod in propItems: if (prod["hasRegister"] == False): prodList.append({ "id": prod["id"], "name": prod["name"], "channel": prod["channelId"], "price": prod["price"] }) logger.info('-----获取以下未申请的免费试用,总数:{0}---\n{1}'.format( len(prodList), prodList)) return prodList
def signFreeTry(prod, user): # https://m.dianping.com/play-next/node/freetry/result?productid=66818&jumpFromWx=&cityid=7&latitude=22.54881&longitude=113.94119&channel=16&product=dpapp&pushEnabled=0 url = 'https://m.dianping.com/play-next/node/freetry/result' params = { "token": user["token"], "longitude": "*", "lng": "*", "latitude": "*", "lat": "*", "dpid": "*", "channel": prod["channel"], "category": "0", "catid": "50", "utm_source": "rb", "cityid": "7", "ci": "", "mina_name": "", "productid": prod["id"], "source": "", "shopid": prod.get("shopId", ''), "mobile": user["phone"] } queryParams = urllib.parse.urlencode(params) fetchUrl = "?".join([url, queryParams]) user["headers"].update({ "Host": "m.dianping.com", "Referer": fetchUrl, "Upgrade-Insecure-Requests": "1", "DNT": "1" }) response = request.openUrl(fetchUrl, user, {}) content = response.read() soup = BeautifulSoup(content, "html.parser") for result in soup.find_all('div', {"class": "supply-result"}): logger.info(prod["name"] + ': ' + result.get_text(strip=True))