监测京东商品价格波动

写着玩的,不用再去每天看要买的商品是否降价,如果降价就发布一条推文。

#!/usr/bin/env python
# coding: utf-8
import tweepy
import requests
import re
import sys
import datetime
import json
# 京东的编码是gbk
reload(sys)
sys.setdefaultencoding('gbk')head = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" }
today = str(datetime.date.today())
myfavourite = {          # 这里的价格是我期望的价格,非商品实际价格'789778':99.00,     # 汇源100%橙汁200ml*24盒'1169940':179.00    # 飞利浦(PHILIPS)HX6013/05标准型牙刷头3支装适用牙刷HX6730HX6761HX6511HX3216HX6972HX3130HX3120HX3110
}
# 通过商品id号获取商品名称
def getproductname(productid):url = 'http://item.jd.com/' + productid + '.html's = requests.session()r = s.get(url, headers=head)pattern_title = re.compile(ur"<h1>(.*?)</h1>")result_productname = re.findall(pattern_title, unicode(r.content))return result_productname
# 获取商品详细信息
def getproductdetails(productid):url = 'http://pe.3.cn/prices/pcpmgets?skuids=' + productid + '&origin=5&area=15_1213_3409's = requests.session()r = s.get(url, headers=head).json()return r# p手机端实际价格 pcp电脑端实际价格# [{u'p': u'168.00', u'pcp': u'188.00', u'm': u'398.00', u'id': u'1456371991'}]
# 发布推文
def posttwitter(content):consumer_key = 'f...j'consumer_secret = 'W...8'access_token = '4...j'access_token_secret = 'Q...M'auth = tweepy.OAuthHandler(consumer_key, consumer_secret)auth.set_access_token(access_token, access_token_secret)api = tweepy.API(auth)if content:api.update_status(status=content)
# 判断价格涨跌
def detectprice(productid):productdetails = getproductdetails(productid)[0]# {u'p': u'168.00', u'pcp': u'188.00', u'm': u'398.00', u'id': u'1456371991'}result_twitter = '<<' + getproductname(productid)[0] + '>>' + u'降价了!当前手机端价格为:' + productdetails['p']log = {'date': today, 'id': productid, 'name': getproductname(productid)[0].encode('utf-8'), 'price': float(productdetails['p'])}result_log = json.dumps(log)if float(productdetails['p']) < myfavourite[productid]:    # 如果今天的价格 低于 期望价with open('log_' + productid + '.txt', "r") as logfile:logfile_content = logfile.readlines()[-1:]    # 取最后一行数据,即昨天得价格if float(productdetails['p']) < json.loads(logfile_content[0])['price']:    # 如果今天的价格 低于 昨天的with open('log_' + productid + '.txt', "a") as logfile:logfile.write(result_log + "\n")posttwitter(result_twitter)return u'推文已发布!'else:    # 如果今天的价格 高于或等于 昨天的with open('log_' + productid + '.txt', "a") as logfile:logfile.write(result_log + "\n")return u"由于今天的价格等于或高于昨天,故不再发布推文通知!"else:    # 如果今天的价格 等于或高于 期望价with open('log_' + productid + '.txt', "a") as logfile:logfile.write(result_log + "\n")return u"实际价格高于或等于您的预期!"
# 调用函数
print detectprice('789778')

 

附上京东的几个查询接口:

1. http://p.3.cn/prices/mgets?skuIds=J_1456371991
[{"id":"J_1456371991","p":"188.00","m":"398.00"}]

2. http://c0.3.cn/stock?skuId=1456371991&cat=652,829,854&area=15_1213_3409_0&extraParam={"originid":"1"}
{"stock":{"rn":-1,"IsPurchase":false,"ArrivalDate":"","channel":1,"StockState":33,"PopType":0,"vd":null,"isJDexpress":"0","StockStateName":"现货","Dti":null,"afsCode":1,"area":{"countyName":"江干区","success":true,"townName":"","cityName":"杭州市","provinceName":"浙江"},"support":[],"Dc":[{"ordermin":0,"dcash":0,"dtype":1,"freihtType":1}],"dcashDesc":"","sidDely":"-1","rfg":0,"stockDesc":"<strong>有货</strong>","pr":{"promiseResult":null,"resultCode":-55},"code":1,"skuState":1,"Ext":"fare:0,is7ToReturn:1","realSkuId":1456371991,"promiseResult":"","eir":[{"helpLink":"//help.jd.com/user/issue/103-983.html","showName":"货到付款","iconType":0,"resultCode":1,"iconTip":"支持送货上门后再收款,支持现金、POS机刷卡等方式","iconSrc":"货到付款","picUrl":"http://static.360buyimg.com/item/assets/picon/fangzi.png","iconCode":"pop_PaymentCod"}],"ir":[]},"choseSuit":[]}

3. http://pe.3.cn/prices/pcpmgets?skuids=1456371991&origin=5&area=15_1213_3409
[{"id":"1456371991","pcp":"188.00","p":"168.00","m":"398.00"}]

转载于:https://www.cnblogs.com/IvanChen/p/5512400.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Andorid之Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法总结

在调试代码的时候我们需要查看调试信息&#xff0c;那我们就需要用Android Log类。 android.util.Log常用的方法有以下5个&#xff1a;Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE&#xff0c;DEBUG,INFO, WARN&#xff0c;ERROR。 1、Log.v 的调…

SharePoint 2010 master page 控件介绍(5):其他

转&#xff1a;http://blog.csdn.net/lgm97/article/details/6409227 <!-- 处理搜索按下“enter”键和点击后退按钮 --> <input type"text" name"__spDummyText1" style"display:none;" size"1"/> <input type"te…

linux iotop rpm,iotop命令_Linux iotop 命令用法详解:用来监视磁盘I/O使用状况的工具...

iotop命令是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI&#xff0c;其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat&#xff0c;nmon等大多数是只能统计到per设备的读写情况&#xff0c;如果你想知道每个进程是如何使用IO的就比较…

.NET 6新特性试用 | LINQ功能改进

前言.NET6为LINQ添加了多个新API&#xff0c;在本文中&#xff0c;我们将始终使用User类逐一演示这些添加到LINQ中的内容&#xff1a;public class User {public string Name { get; set; }public int Age { get; set; } }*By方法包括下列方法&#xff1a;DistinctBy: 根据指定…

VS2010下的多线程窗口

多线程的调试一直是一个令人蛋疼的问题&#xff0c;一般的解决方法是写Log。有的时候想要直观地看一下线程的运行状态&#xff0c;简直是困难。幸好vs2010给我们提供了一个多线程窗口。 使用方式&#xff1a; 1、按F5进入调试状态下 2、按图1所示打开多线程窗口 图1 打开多线程…

linux cp 强制yes,linux cp实现强制覆盖

说明&#xff1a;linux下使用cp -fr src dest&#xff0c;发现即使加了-f也是不能强行覆盖的&#xff0c;这是为什么呢&#xff1f;原因&#xff1a;-f其实已经会强制覆盖了&#xff0c;但部份服务器会默认增加别名alias cp’cp -i’&#xff0c;因此当你执行cp时&#xff0c;其…

第2天:汇编语言与Makefile

汇编语言指令 ORG&#xff1a;origin&#xff0c;指定程序从某个地址开始&#xff0c;即把程序装载到内存的某个地址。 如&#xff1a;ORG 0x7c00&#xff0c;0x7c00作为是英特尔指定的。JMP&#xff1a;jump&#xff0c;跳转指令。entry, msg, loop&#xff1a;自定义标签&…

Android之如何用cmd方法查看logcat

使用cmd命令查看logcat 使用adb logcat命令可查看android系统和应用的log adb logcat //显示全部日志 adb logcat > c:\test.log //将日志输出保存到文件test.log logcat日志中的优先级/tag标记: android输出的每一条日志都有一个标记和优先级与其关联。 优先级是下面的…

Typora 开始收费, 不妨试试这个开源免费的MD编辑器

相信大家很多人都已经知道了, 最好用最受欢迎的 markdown 编辑器 - Typora, 从 1.0.0 版本已经开始收费, 根据其官网的介绍, 收费方式为买断制, 也就是一次付费永久使用, 价格是14.99 刀, 另外支持支付宝付款, 89 元人民币, 最多支持3台设备使用, 对于我来说, 算上家里和公司的…

MySQL - Found option without preceding group in config file

1.1.1 现象 启动MYSQL超时&#xff0c;windows提示错误&#xff0c;在服务中MYSQL状态一直处于starting状态&#xff0c;执行MYSQL命令&#xff0c;出现如下错误信息&#xff1a; error:found option without preceding group in config file:E:\webserver\mysql5\my.ini at li…

31天重构学习笔记19. 提取工厂类

概念&#xff1a;本文中的“提取工厂类”是指如果要创建的对象很多&#xff0c;则代码会变的很复杂。一种很好的方法就是提取工厂类。 正文&#xff1a;一般来说我们需要在代码中设置一些对象&#xff0c;以便获得它们的状态&#xff0c;从而使用对象&#xff0c;所谓的设置通常…

linux+4.4+android,Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已:64位Ubuntu 11.10下Android开发环境的搭建(JDKEclipseADTAndroid SDK详细) http://www.linuxidc.com/Linux/2013-06/85303.htm一、配置依赖…

Android之定时器实现的几种方式和removeCallbacks失效问题详解

转载&#xff1a;http://blog.csdn.net/xiaanming/article/details/9011193 实现定时器有很多种方式&#xff0c;在这里我简单的介绍几种方式 实现定时器有很多种方式&#xff0c;在这里我简单的介绍几种方式 (1)使用Handler Runnable的方式 Handler handler new Handler(…

android中的ContentProvider实现数据共享

为了在应用程序之间交换数据&#xff0c;android中提供了ContentProvider&#xff0c;ContentProvider是不同应用程序之间进行数据交换的标准API。当一个应用程序需要把自己的数据暴露给其他程序使用时&#xff0c;该应用程序可以通过提供contentProvider来实现&#xff0c;其他…

Blazor是春天还是寒风里的挣扎

title: Blazor是春天还是寒风里的挣扎 date: 2021-10-25 14:00:00 toc: true categories:- Blazor tags:- Blazor- MASA Blazor#官方解释BlazorBlazor允许您使用c#而不是JavaScript构建交互式web UI。Blazor应用由可重用的web UI组件组成&#xff0c;这些组件使用c#、HTML和CSS…

js个人笔记

2019独角兽企业重金招聘Python工程师标准>>> 看锋利的jquery第二版&#xff0c;&#xff0c;在前言的时候说建议使用最新版jquery&#xff0c;&#xff0c;然而在第二章结尾的地方有用到toggle()这个方法&#xff0c;&#xff0c;我自己用发现和书上的功能不同&…

第二天:装饰模式及面向对象设计原则4则

装饰模式是为已有功能动态地添加更多功能的一种方式.当系统需要新功能的时候,是向旧系统中添加新的代码.这些新加的代码通常装饰了原有类的核心职责或主要行为.这样的结果等同于在主类中加入新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满…