`
danielking
  • 浏览: 16764 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

写了个开心网查看朋友果实的小程序

阅读更多
用python2.6写的,用2.5跑可能要改里面json相关部分
其实就是菜园旁边那个按钮的功能,只是没那么多时间老去打开浏览器看那个东西,所以做了这个



#!/usr/bin/env python
# -*- coding:utf-8 -*-
# coded by Daniel King

import re, time, thread, webbrowser
from Tkinter import *
import urllib, urllib2, cookielib, json

class Kaixin(object):

    def __init__(self, app):
        self.app = app
        self.signed_in = False
        self.cj = cookielib.LWPCookieJar()
        try:
           self.cj.revert('kaixin.coockie')
        except:
            None
        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj))
        urllib2.install_opener(self.opener)

    def signin(self):
        r = self.opener.open('http://www.kaixin001.com/home/')
        if r.geturl() == 'http://www.kaixin001.com/?flag=1&url=%2Fhome%2F':
            print 'Need logging on!'
            params = {'email':self.app.email, 'password':self.app.passwd, 'remember':1}
            req = urllib2.Request(
                'http://www.kaixin001.com/login/login.php',
                urllib.urlencode(params)
            )
            r = self.opener.open(req)
            if r.geturl() == 'http://www.kaixin001.com/home/':
                print 'Logged on successfully!'
                self.cj.save('kaixin.coockie')
                self.signed_in = True
        else:
            print 'ok!'
            self.signed_in = True

    def monitor(self):
        if not self.signed_in:
            self.signin()
        button = self.app.buttons['monitor']
        if self.signed_in:
            r = self.opener.open('http://www.kaixin001.com/app/app.php?aid=1062&url=garden/index.php')
            m = re.search('var g_verify = "(.+)";', r.read())
            verify = m.group(1)

            self.is_monitoring = True
            button['text'] = u'停止'
            while self.is_monitoring:
                print time.strftime('%y/%m/%d %H:%M:%S')
                req = urllib2.Request(
                    'http://www.kaixin001.com/house/garden/getfriendmature.php',
                    urllib.urlencode({'_':'','verify':verify})
                )

                r = self.opener.open(req)
                self.app.data = json.loads(r.read())
                app.list.delete(0, END)
                for f in self.app.data:
                    self.app.list.insert(END, f['realname'])
                time.sleep(30)

        button['text'] = u'开始'
        print 'Monitoring is stopped.'

    def stop_monitoring(self):
        self.is_monitoring = False

class App(Tk):

    def __init__(self):
        Tk.__init__(self)
        self.data = []
        self.email = ''
        self.passwd = ''
        self.interval = 30
        self.kaixin = Kaixin(self)
        self.font = 'Tahoma 9'
        self.geometry('240x200')
        self.title(u'开心网果实探测仪')

        self.btnpane = PanedWindow(self)
        self.btnpane.pack(expand = 0, side = 'bottom')

        buttons = [[self.on_monitor, u'开始', 'monitor'],
                [self.on_config, u'设置', 'config'],
                [self.on_exit, u'退出', 'exit']]
        self.buttons = {}

        for btn in buttons:
            button = Button(self.btnpane, text = btn[1], font = self.font)
            self.buttons[btn[2]] = button
            button.bind('<ButtonRelease-1>', btn[0])
            self.btnpane.add(button)

        self.list = Listbox(self, font = self.font)
        self.list.pack(expand = 1, fill = 'both', side = 'top')
        self.list.bind('<Double-ButtonRelease-1>', self.on_list_dblclick)

    def on_monitor(self, event):
        button = self.buttons['monitor']
        if button['text'] == u'开始':
            thread.start_new_thread(self.kaixin.monitor, ())
        else:
            self.kaixin.stop_monitoring()

    def on_config(self, event):
        win = ConfigWin(self)

    def on_list_dblclick(self, event):
        s = self.list.curselection()
        if len(s) == 1:
            uid = self.data[int(s[0])][u'uid']
            webbrowser.open('http://www.kaixin001.com/app/app.php?'
                'aid=1062&url=garden/index.php&_lgmode=pri&fuid='+str(uid));

    def on_exit(self, event):
        self.quit()

class ConfigWin(Toplevel):
    def __init__(self, app):
        Toplevel.__init__(self, app)
        self.app = app
        self.title(u'设置')
        Label(self, text = u'电邮:', font = app.font).grid(row = 0, column = 0)
        self.email = Entry(self)
        self.email.grid(row = 0, column = 1)
        Label(self, text = u'密码:', font = app.font).grid(row = 1, column = 0)
        self.passwd = Entry(self, show = '*')
        self.passwd.grid(row = 1, column = 1)
        Label(self, text = u'间隔:', font = app.font).grid(row = 2, column = 0)
        self.interval = Entry(self, text = '30')
        self.interval.grid(row = 2, column = 1)

        self.email.insert(0, app.email)
        self.passwd.insert(0, app.passwd)
        self.interval.insert(0, str(app.interval))

        btnpane = PanedWindow(self)
        btnpane.grid(row = 3, column = 0, columnspan = 2)
        btn_cancel = Button(btnpane, text = u'取消', font = app.font)
        btn_cancel.grid(row = 3, column = 0, columnspan = 2)
        btn_ok = Button(btnpane, text = u'确定', font = app.font)
        btn_ok.grid(row = 3, column = 0, columnspan = 2)
        btnpane.add(btn_cancel)
        btnpane.add(btn_ok)

        btn_ok.bind('<ButtonRelease-1>', self.on_ok)
        btn_cancel.bind('<ButtonRelease-1>', self.on_cancel)

        self.focus_set()
        self.grab_set()
        self.wait_window()

    def on_ok(self, event):
        self.app.email = self.email.get()
        self.app.passwd = self.passwd.get()
        self.app.interval = int(self.interval.get())
        self.destroy()

    def on_cancel(self, event):
        self.destroy()

app = App()
app.mainloop()
分享到:
评论
23 楼 freizl 2009-09-30  
self.cj.revert('kaixin.coockie')
这个似乎没有清空cookie
这样子我重新run时都不需要登录。
22 楼 freizl 2009-09-30  
请问下高手有啥办法/建议 如何登录qzone, 然后也可以监听qq农场.
http://qzone.qq.com

这里有个验证码没啥概念..

谢谢
21 楼 danielking 2009-08-13  
d4rkl0rd 写道
想问下LZ.在firebug中如何得到flash提交的请求或得到的response呢?


网络那一栏里有
20 楼 d4rkl0rd 2009-07-03  
想问下LZ.在firebug中如何得到flash提交的请求或得到的response呢?
19 楼 zhuyx808 2009-06-03  
python......牛叉啊,能不能写个qq上的?
18 楼 xiaohai_110 2009-05-12  
是很郁闷。刚刚学python 不知道怎么下手。请前辈们指点下迷津
17 楼 regulusxy 2009-04-27  
retard 写道
贴下我的,
我写得太丑了,又没注释。。。

注:
  • 需要python 2.6, lxml
  • lxml 见这里:http://codespeak.net/lxml/
  • 用 py2exe 打包的话需要目标机器装上Microsoft Visual C++ 2008 Redistributable Package
  • config.ini里需要填帐号和密码

真实体现了Python的快速工具开发的特点哈。。。
之前一直用的elementtree。。。原来lxml好多了。
16 楼 retard 2009-04-27  
贴下我的,
我写得太丑了,又没注释。。。

注:
  • 需要python 2.6, lxml
  • lxml 见这里:http://codespeak.net/lxml/
  • 用 py2exe 打包的话需要目标机器装上Microsoft Visual C++ 2008 Redistributable Package
  • config.ini里需要填帐号和密码
15 楼 retard 2009-04-27  
regulusxy 写道
retard 写道
受楼主启发写了一个,现在可以自己浇水除草收获犁地,偷果实
查看停车状况,但是怎么自动找车位还没想好


楼主的程序里面是不是因为传回的json结构变化了,需要改一个地方:
原来self.app.data = json.loads(r.read())
需要改成:
               tempdata = json.loads(r.read())
               self.app.data = tempdata[u'friend']

我也正在分析kaixin001的页面,看到大量的xml。。。痛苦中,兄台可否留下交流一下?

我是这样写的
    data = json.loads(req.read())
    combine = data['share']+data['friend'] #合并两个列表
    if len(combine) < 1: #判断是否为空
        return
    for elm in combine:
        checkfriendgarden(verify,elm['uid']) #挨个检查列表中的好友
        print elm['uid'], elm['realname']
14 楼 regulusxy 2009-04-26  
retard 写道
受楼主启发写了一个,现在可以自己浇水除草收获犁地,偷果实
查看停车状况,但是怎么自动找车位还没想好


楼主的程序里面是不是因为传回的json结构变化了,需要改一个地方:
原来self.app.data = json.loads(r.read())
需要改成:
               tempdata = json.loads(r.read())
               self.app.data = tempdata[u'friend']

我也正在分析kaixin001的页面,看到大量的xml。。。痛苦中,兄台可否留下交流一下?
13 楼 retard 2009-04-25  
受楼主启发写了一个,现在可以自己浇水除草收获犁地,偷果实
查看停车状况,但是怎么自动找车位还没想好
12 楼 Hooopo 2009-04-21  
danielking 写道
flash也使用http请求啊
firebug很容易看到的

要是我够闲的话,可以把大部分操作的接口都找到,好多事情可以自动完成了, 哎, 昨天就忘了启动车子, 输掉了

好像可以加随机值吧。。这样难道就大了,不知道楼主玩没玩过校内网的那个开心农场,,,,
11 楼 剑事 2009-04-19  
写了个偷果实的部分
一启动那些人就傻了

10 楼 lsyong 2009-04-17  
何必做界面,后台偷偷跑多好,我挂了crontab,10分钟偷一轮,哈哈。
9 楼 garfeildma 2009-04-15  
                for f in self.app.data:   
                    self.app.list.insert(END, f['realname'])   


有个bug,没有结果的时候会出异常
8 楼 danielking 2009-04-01  
就是解析json,你得懂我的源码就知道怎么用了,其实很简单
7 楼 regulusxy 2009-03-30  
我用python 2.5.4,用了py.json,需要修改什么才能使用呢?
6 楼 iasybvm 2009-03-28  
谢谢楼上,看来,我得好好学习一下 firebug 了。现在我只用它来看一下文档的结构。汗。。。。。。
5 楼 danielking 2009-03-28  
flash也使用http请求啊
firebug很容易看到的

要是我够闲的话,可以把大部分操作的接口都找到,好多事情可以自动完成了, 哎, 昨天就忘了启动车子, 输掉了
4 楼 iasybvm 2009-03-28  
我想知道楼主是怎么搞到开心网的api的,如果是普通网页,可以检查源码,但它是flash啊。

相关推荐

    种树获果实小程序源码-简单快速上手

    在本文中,我们将深入探讨“种树获果实小程序源码”的相关知识点,这款小程序的设计灵感源自于各大应用程序中的类似互动,旨在提供一个有趣的用户参与方式,让用户通过虚拟种植、照顾树木来获得虚拟水果。...

    合成大西瓜小游戏微信小程序源码

    总的来说,"合成大西瓜小游戏微信小程序源码"提供了一个绝佳的学习机会,让开发者能够深入理解微信小程序的开发流程、JavaScript游戏算法以及如何构建互动性强的轻量级应用。通过研究和实践这个源码,开发者不仅可以...

    基于深度学习的温室大棚小番茄果实计数方法.pdf

    基于深度学习的温室大棚小番茄果实计数方法 一、深度学习在温室大棚小番茄果实计数中的应用 深度学习技术已经在多个领域获得了广泛的应用,包括计算机视觉、自然语言处理、语音识别等。本文中,我们将讨论深度学习...

    果实信息提取器

    "果实信息提取器"是一个基于Python编程语言开发的软件工具,设计用于高效地从各种数据源中抓取和处理关于果实的信息。这个工具的核心功能是提取果实的数量,这对于农业研究、果蔬销售或供应链管理等领域非常实用。其...

    基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统-深度学习算法应用(含pytho、JS工程源码)+数据集+模型

    1.本项目基于Keras框架,引入CNN进行模型训练,采用Dropout梯度下降算法,按比例丢弃部分神经元,同时利用IOT及微信小程序实现自动化远程监测果实成熟度以及移动端实时监测的功能,为果农提供采摘指导,有利于节约...

    stm32f103 贪吃蛇小程序

    这个贪吃蛇小程序是利用STM32F103的性能开发的一个有趣的项目,旨在展示如何在嵌入式系统上实现游戏功能。 首先,我们要理解STM32F103的基本结构。它拥有高速的闪存、SRAM存储器,以及一系列的外设接口,如UART、...

    论文研究 - 不同规格的“扶余”柿子果实的果实性状和矿质养分含量

    大果实的皮肤颜色较红,种子多于小果实。 果实大小与L / D比(R2 = 0.741,p≤0.01)和硬度(R2 = 0.604,p≤0.01)之间存在强烈的负相关关系。 肤色和每个果实的种子数与果实大小呈正相关,尤其是与果实高度呈正...

    基于离散点的果实表面三维重建

    【标题】"基于离散点的果实表面三维重建"是一个涉及计算机图形学、图像处理以及机器视觉领域的技术,主要用于在数字环境下对真实世界的果实进行精确的三维建模。这一技术通常应用于农业研究、产品质量检测、虚拟现实...

    梨果实图像数据集,共有1400+图片

    梨果实图像数据集是计算机视觉领域的一个重要资源,主要用于训练和测试深度学习模型,特别是针对物体检测任务。这个数据集包含超过1400张梨果实的图片,为研究人员和开发者提供了一个丰富的训练素材库,有助于提升...

    水杨酸调控果实成熟衰老相关基因机制研究

    综上所述,水杨酸在植物特别是果实成熟衰老过程中的作用及其调控机制是当今植物科学的一个重要研究领域。通过深入理解水杨酸的作用机制,可以为调控果实成熟衰老,延长贮藏保鲜期提供理论依据和技术支持,具有重要的...

    大班体育游戏教案小袋鼠收果实.docx

    【大班体育游戏教案——小袋鼠收果实】 ...总的来说,"小袋鼠收果实"是一个集趣味性、挑战性和教育性于一体的体育游戏,它能够全面促进大班儿童的身体发展、社交能力和认知能力,是幼儿园体育教学中的一个理想案例。

    opencv果实分割与识别

    本项目专注于猕猴桃果实的图像处理,涵盖了几个关键步骤,包括图像预处理、特征提取和目标识别。以下是这些过程的详细说明: 首先,**图像二值化**是图像处理中的基础步骤,它将图像转化为黑白色调,便于后续分析。...

    果实重叠识别.txt

    3. **去除小面积区域**:使用`bwareaopen`函数去除图像中小于9000像素的连通区域,以去除背景噪声或小颗粒物体,保留较大的目标物体(如重叠的果实)。 4. **腐蚀操作**:使用`imerode`函数进行腐蚀操作,目的是...

    对果实图像进行阈值分割

    例如,如果我们知道果实的HSV值大致在某个范围内,就可以设置相应的阈值,只保留在这个范围内的像素,其余的则被视为背景。 在OpenCV中,可以使用`cv2.inRange()`函数进行HSV阈值操作。该函数接受一个源图像、一个...

    国外机器摘果实

    使用机器摘果实的录像

    果实时切割点的提取.zip

    "果实时切割点的提取.zip"这个压缩包文件包含了实现这一目标的MATLAB程序和实验步骤,旨在帮助研究人员或工程师理解并应用相关算法。下面将详细介绍这个项目中的关键知识点。 首先,切割点的提取是机器人摘果过程中...

    探究实验 花生果实大小的变异.docx

    探究实验 花生果实大小的变异.docx

    开心网果园农夫软件自动种植

    3. **开心网花园农夫.exe**:这是程序的主执行文件,包含了软件的主要逻辑和功能。双击这个文件,用户就可以启动软件并开始自动种植和收获果子。 4. **What's New.txt**:这通常包含软件更新日志,记录了新版本的...

    自然光照条件下采摘机器人果实识别的表面阴影去除方法.pdf

    自然光照条件下的采摘机器人在执行任务时,果实的识别是一个关键环节。然而,光照环境的复杂性,尤其是阴影的存在,往往会对果实的准确识别造成困扰。这篇由熊俊涛等人发表在《农业工程学报》的文章,探讨了如何在...

    果实的结构实验exe.zip

    【描述】:“果实的结构实验exe.zip”的描述简洁,暗示了它可能是一个教育性质的程序,专门用于教授生物学中的果实结构。它利用了现代科技手段,如3D建模和交互式界面,使用户能够以更直观的方式探索和理解果实的...

Global site tag (gtag.js) - Google Analytics