精华内容
下载资源
问答
  • 微信公众号开发 Python

    2020-11-30 10:55:53
    被动告知 主动恢复 内嵌网页 信息格式是xml 模块xml头dict 方法1 : parse 封装成xml字典 方法2 : unparse 封装成xml

    欢迎访问个人博客http://www.jkraise.top

    在这里插入图片描述

    1. 被动告知
    2. 主动恢复
    3. 内嵌网页
      在这里插入图片描述

    信息格式是xml

    模块xml头dict

    方法1 : parse
    封装成xml字典
    方法2 : unparse
    封装成xml

    展开全文
  • 微信公众号开发Python-JSSDK授权

    千次阅读 2019-07-12 13:11:40
    '''从微信端获取access_token''' print ( "C" ) try : key = 'access_token' # access_token = requests.get(self.base_get_access_token).json()['access_token'] access_token = "23_oZS_...

    代码拿去,有更新,意见提示与我,互补,谢谢

    import time
    from django.core.cache import cache
    import requests
    import hashlib
    import random
    import string
    
    class wxJdkParmasView(object):
    
        ''' 1, 此处官方文档明确提到用户需要缓存jsapi_ticket
               因为其api调用次数非常有限,根据文档说明我把获取基础支持的acess_token和ticket写到了一起
          
            2, 此类是给前端js_JDK构造参数,并得到 nonceStr,signature,timestamp 的类,调用signutareEncryption()即可
               Redis缓存,需要自己配置,网上一大堆,此就不说了
    
            3, signature生成需要一下几个参数noncestr(随机字符串),
               有效的jsapi_ticket, timestamp(时间戳),
               url(当前网页的URL,不包含#及其后面部分)
        '''
        def __init__(self,url):
    
            # app_id
            self.app_id = "自己的APP_ID"
            # nonceStr
            self.app_secret = "自己的获取Token的随机字符串"
            # 获取access_token链接
            # https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
            self.base_get_access_token = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s'%(self.app_id,self.app_secret)
            # 获取ticket链接
            # https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
            self.get_ticket_url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={}&type=jsapi'
            # 生成signature的参数
            self.ret = {
                'nonceStr': self.__create_nonce_str(),
                'timestamp': self.__create_timestamp(),
                'jsapi_ticket': self.__get_ticket(),
                'url': url
            }
            self.signutareEncryption()
    
        def get_access_token(self):
            '''从微信端获取access_token''' 
    
            print("C")
            try:
                key = 'access_token'
                # access_token = requests.get(self.base_get_access_token).json()['access_token']
                access_token = "23_oZS_nQaKMC5UjbfzDJ48Jsaz6hPhLjWg3pVDCd2tva1hM19nQTdimLH-Dn-Hy0da2NDFdgM0AvKkkR48WKBUwTQkjRJLl2PAD0ZcKgpvIw9Qn3vWBI6B6YDYnm4T-UnOfn7Hj-x_B_ZCHNnVKLUeACAYZI"
                # 缓存并设置过期时间
                cache.set(key,access_token,110*60)
                print("数据库保存token正常:%s"%cache.get('access_token'))
                return access_token
            except:
                return "获取access_token异常"
    
    
        def __get_ticket(self):
            '''获取tickey'''
    
            try:
                key = 'ticket'
                if cache.has_key(key):
                    ticket = cache.get(key)
                    print('Redis中保存ticketB正常:%s'%ticket)
                
                else:
                    print("A")
                    if cache.has_key('access_token'):
                        access_token = cache.get('access_token')
                        print('Redis里面的access_token:%s'%access_token)
                    else:
                        # None从微信端获取access_token 
                        print("B")
                        access_token = self.get_access_token()
                        print("微信端得到的access_token:%s"%access_token)
                    
                    # 获取ticket
                    print("获取ticket的链接:%s"%self.get_ticket_url.format(access_token))
                    ticket = requests.get(self.get_ticket_url.format(access_token)).json()['ticket']
    
                    # 缓存ticket ,设置过期时间
                    cache.set(key,ticket,110*60)
                    
                    # print("Redis中保存ticketA正常%s"%cache.get('ticket'))
    
                return ticket
            except:
                return "获取tickey异常"
    
        def __create_nonce_str(self):
            '''从a-zA-Z0-9生成指定数量的随机字符'''
    
            print("随机字符")
            return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(15))
    
        def __create_timestamp(self):
            '''生成时间戳'''
    
            print("时间戳")
            return int(time.time())
    
        def signutareEncryption(self):
            '''生成签名signature'''
    
            string = '&'.join(['%s=%s' % (key.lower(), self.ret[key]) for key in sorted(self.ret)]).encode('utf-8')
            signature = hashlib.sha1(string).hexdigest()
            print("生成的签名:%s"%signature)
            
            # 返回js_jdk参数
            response = dict()
            response['nonceStr'] = self.ret.get('nonceStr')
            response['signature'] = signature
            response['timestamp'] = self.ret.get('timestamp')
            print("生成jdk的参数字典:%s"%response)
            return response
    
    
    
    
    展开全文
  • 最近在玩 Python , 就找一些站点学习了一下, 想起之前使用 PHP 爬微信公众号的文章, 就再次看了 PHP开发-微信公众号文章采集原理及思路 这篇文章, 发现搜狗有个更新导致那篇文章已经没法爬了..上图是之前那篇文章的,...

    去年九月, 写了一篇爬取微信公众号的文章: PHP开发-微信公众号文章采集原理及思路 下文出现的 "那篇文章"就是这个.

    最近在玩 Python , 就找一些站点学习了一下, 想起之前使用 PHP 爬微信公众号的文章, 就再次看了 PHP开发-微信公众号文章采集原理及思路 这篇文章, 发现搜狗有个更新导致那篇文章已经没法爬了..

    1587698357670891.png

    上图是之前那篇文章的, 那篇文章的爬取原理一句话讲完就是, 使用 PHP 爬到了 HTML 内容, 再获取到这个 data-share 属性, 就可以请求 data-share 属性的链接拿到文章内容.

    再来看看现在的搜狗搜索微信文章:

    1587698373825656.png

    可以看到, 搜狗已经把 data-share 属性给去掉了, 只留下了 href 属性. 使用程序请求 href 属性的链接, 会发现被反爬了, 比如使用 Postman 或 PHP 用 file_get_contents 函数请求, 就会看到返回的数据有这么一段:

    1587698390435099.png

    请求的时候使用 curl 并携带 cookie 的话, 就会返回(本文使用 Postman):

    1587698409556717.png

    将返回的字符串进行拼接, 就可以得到一段 URL , 再请求这个 URL 就拿到了文章的 HTML 了, 接下来就不用多说了...

    1587698424332403.png

    上面思路的测试都是使用 Postman 请求, 按理说使用 PHP 或者其他程序请求结果也是一致的, 但是对 cookie 之类的那些操作太麻烦了, 所以使用 Python 重新实现了一遍, 用了 Selenium, 除了爬微信的, 还有一些网站是使用 JS 处理的, 比如阿里的商品详情, 有兴趣的话可以去尝试学习一下, 会发现反爬机制更厉害.

    关于 Selenium 可以百度或者谷歌搜索一下, 大白话的说就是他可以打开一个浏览器的框, 然后执行打开网页之类的操作, 这时候并不需要再伪造 UA 或者另外存 cookie 再进行携带请求的, 因为它本身就是浏览器. 如果有兴趣 还可以搜一下: 模拟浏览器行为

    先是安装 Python 环境, 这个就不多说...

    环境变量简单说一下, 需要设置的环境变量如下图, 一般情况下 Python 默认安装路径是这个: C:\用户\用户名\AppData\Local\Programs\Python\Python38 最后的 Python38 是根据版本而定的.

    1587698484587729.png

    安装 Selenium, 执行命令:pip install selenium

    安装浏览器驱动, 驱动下载: https://chromedriver.storage.googleapis.com/index.html 浏览器驱动和浏览器版本需要对应, 比如:

    1587698520137285.png

    浏览器版本是 81.0.4044.122 就可以下载这些驱动:

    1587698533156885.png

    驱动可以放在某个目录下, 比如 D 盘下的 webdrivers 目录. 执行下面博主写的代码就能运行微信公众号文章的爬取了, 根据自己的需求可以继续编写代码:from selenium import webdriver

    import time

    wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')

    lst_url = []

    page_num = 2 # 想要爬取的页数

    keyword = "百度" # 关键词

    # 以下代码的 11002601 可能会因为搜狗更新而变更 需执行代码前自行查看搜狗搜索结果的 DOM

    def get_article_url():

    article_num = 10; # 定义每页的文章数量

    for i in range(0, article_num):

    url = wd.find_element_by_xpath(f'//*[@id="sogou_vr_11002601_title_{i}"]').get_attribute("href")

    lst_url.append(url)

    wd.get("https://weixin.sogou.com/")

    wd.find_element_by_xpath('//*[@id="query"]').send_keys(keyword)

    wd.find_element_by_xpath('//*[@id="searchForm"]/div/input[3]').click()

    get_article_url()

    if page_num >= 2:

    for x in range(2, page_num + 1):

    wd.find_element_by_xpath(f'//*[@id="sogou_page_{x}"]').click()

    get_article_url()

    for key, url in enumerate(lst_url):

    wd.get(url)

    time.sleep(3)

    title = wd.find_element_by_xpath('//*[@id="activity-name"]').text

    file = open(f"{title} - {key}.html", 'w', encoding = "utf-8")

    #file.write(wd.find_element_by_xpath('//*[@id="js_article"]').get_attribute('innerHTML'))

    file.write(title)

    file.close()

    wd.close()

    如果不会使用上面代码, 可以在桌面创建一个 wx 文件夹, 进入文件夹再创建一个 wx.py 文件并将上面代码复制进去保存, 然后使用 CMD 或者其他命令行工具进入到桌面, 执行命令:python wx.py

    1587698571435948.png

    执行完成后打开桌面的 wx 文件夹:

    1587698586838965.png

    可以看到全部爬取的文件, 最后还是要说一下, 请勿用于非法用途, 本文提供的代码也仅仅作为分享学习使用. 所造成的一切后果请自行承担.

    展开全文
  • 本文为大家分享了python微信公众号开发的简单过程,供大家参考,具体内容如下网上有很多微信公众号的开发教程,但是都是好几年前的了,而且很多都是抄袭其他人的,内容几乎一模一样。真的无语了。只好自己总结一下...

    本文为大家分享了python微信公众号开发的简单过程,供大家参考,具体内容如下

    网上有很多微信公众号的开发教程,但是都是好几年前的了,而且很多都是抄袭其他人的,内容几乎一模一样。真的无语了。只好自己总结一下开发的一些简单流程。

    一、注册个微信公众号,这个就不详细说了。

    二、登录后台,进入开发中的基本配置,配置下服务器

    blank.gif

    填写url和token,url是服务器的地址,token是自己定义的

    三、登录服务器开发

    网上很多教程用的什么新浪sae啊,webpy都是很久之前的。现在很多东西都变了,所以我没有用,我用的阿里的服务器以及flask做后端。

    代码如下

    # coding:utf-8

    from hashlib import sha1

    from flask import Flask, request

    token = 'xxxxxx'

    app = Flask(__name__)

    def get_update(token, timestamp, nonce):

    arguments = ''

    for k in sorted([token, timestamp, nonce]):

    arguments = arguments + str(k)

    m = sha1()

    m.update(arguments.encode('utf8'))

    return m.hexdigest()

    def check_signature():

    signature = request.args.get('signature', '')

    timestamp = request.args.get('timestamp', '')

    nonce = request.args.get('nonce', '')

    check = get_update(token, timestamp, nonce)

    return True if check == signature else False

    def parse_xml(data):

    try:

    import xml.etree.cElementTree as ET

    except ImportError:

    import xml.etree.ElementTree as ET

    root = ET.fromstring(data)

    datas = ''

    for child in root:

    if child.tag == 'ToUserName':

    toUser = child.text

    datas += '%s' % toUser

    elif child.tag == 'FromUserName':

    fromUser = child.text

    datas += '%s' % fromUser

    else:

    datas += '<' + child.tag + '>'

    datas += child.text

    datas += '' + child.tag + '>'

    datas += ''

    return datas

    @app.route('/weixin', methods=['GET', 'POST'])

    def weixinInterface():

    if check_signature:

    if request.method == 'GET':

    echostr = request.args.get('echostr', '')

    return echostr

    elif request.method == 'POST':

    data = request.data

    msg = parse_xml(data)

    return msg

    else:

    return 'signature error'

    if __name__ == '__main__':

    app.run(host='0.0.0.0')

    一开始的话微信会让你验证填写的url,验证方式是通过传入时间戳timestamp,随机数nonce,token事先约定好的,echostr随机字符串,以及签名signature,需要根据时间戳,随机数,token的值进行字典序排序,然后用sha1加密得到签名,检验签名是否一致,是的话返回随机字符串echostr。如果校验成功,就可以提交了,提交之后就可以启用服务器配置。

    上面的代码还包括了如果用户发送信息给公众号,返回该信息,当然只是很简单的解析xml以及构造xml。其他更复杂的功能需要查询微信的文档。

    到此这篇关于python微信公众号开发简单流程实现的文章就介绍到这了,更多相关python微信公众号开发流程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    时间: 2020-03-07

    展开全文
  • 微信公众号开发教程1python,第一部分,还有两个教程请搜索下。
  • 主要介绍了python微信公众号开发的相关资料,分步骤为大家分享python微信公众号开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 上大学的时候,对微信公众号开发浅尝辄止的玩了一下,感觉还是挺有意思的。 //www.jb51.net/article/133677.htm后来服务器到期了,也就搁置了。由于发布web程序,使用PHP很顺手,就使用了PHP作为开发语言。但是其实...
  • 我的第一个Python项目就是做的微信公众号机器人,按照当时我的思路来讲讲如何学习使用Python开发微信公众号:大家伙收藏顺手点个赞呗。微信公众号功能开发分为两大块:需要调用微信内部功能、不需要调用微信内部...
  • 微信公众号开发教程3python,第一部分和第二部分已经上传了,请搜索下。
  • 微信公众号主要面向名人、政府、媒体、企业等机构推出的合作推广业务。在这里可以通过微信渠道将品牌推广给上亿的微信用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象。 3. 公众平台 微信公众平...
  • 本文面向想通过Python学习公众号开发的同学。一站式解决新手开发微信公众号遇到的所有问题。为了防止我的文章被到处转载,贴一下我的公众号【智能制造社区】,欢迎大家关注。本篇文章首先实现与公众号的对接,实现...
  • 微信公众号开发教程1python,第一部分和第三部分已经上传了,请搜索下。
  • 基于Python微信公众号开发教程

    千人学习 2017-12-25 09:59:04
    基于Python微信公众号开发教程
  • python做的微信公众号服务demo,对初学者有一定的帮助。主要功能为解析用户发过来的信息,返回对应的消息。即被动回答,只实现了响应文本消息,返回文本消息。
  • 本文面向想通过Python学习公众号开发的同学。一站式解决新手开发微信公众号遇到的所有问题。为了防止我的文章被到处转载,贴一下我的公众号【智能制造社区】,欢迎大家关注。本篇文章首先实现与公众号的对接,实现...
  • 微信公众号开发需求3.微信公众号开发原理 1.微信账号类型 个人号 公众号 订阅号 服务号 企业号 这里要讲的就是订阅号 前往注册微信公众号 2.微信公众号开发需求 内嵌功能 被动回复 主动告知 内嵌网页 高级...
  • 网上有很多微信公众号开发教程,但是都是好几年前的了,而且很多都是抄袭其他人的,内容几乎一模一样。真的无语了。只好自己总结一下开发的一些简单流程。一先去注册个微信公众号,这个就不详细说了,二登录后台,...
  • 微信公众平台开发之微信编辑器开发是子恒老师《微信公众平台开发》视频教程的第11部。...内容包含微信公众号编辑器开发思路,编辑器前端页面,功能实现,添加新样式等等。欢迎反馈,微信号:QQ68183131
  • 微信公众号编辑器开发-微信公众号开发11-微信开发php 大秦电商创始人,专...
  • 准备工作首先,申请一个属于自己的微信公众号(必须保证全局管理员是自己的微信账户,否则会很麻烦),还要拥有自己的服务器(Ubuntu 系统)来部署代码,且服务器已经成功安装了网络相关的两个常用软件 uwsgi 和 ...
  • 微信公众号开发需求 3.微信公众号开发原理 @(认识微信公众号) 1.微信账号类型 个人号 公众号 订阅号 服务号 企业号 这里要讲的就是订阅号 前往注册微信公众号 2.微信公众号开发需求 内嵌功能 被动回复 ...
  • 本文为大家分享了python微信公众号开发的简单过程,供大家参考,具体内容如下 网上有很多微信公众号的开发教程,但是都是好几年前的了,而且很多都是抄袭其他人的,内容几乎一模一样。真的无语了。只好自己总结一下...
  • SpringBoot微信公众号开发

    千人学习 2019-06-02 10:48:56
    通过热门框架spring boot来学习微信公众号开发,帮助同学们快速入门微信公众号开发
  • Sanic微信公众号开发 Demo
  • python微信公众号开发

    2018-10-24 09:54:03
    微信公众号开发,暂时只做了一个简单的菜单,一个天气查询,用到了最简单的爬虫
  • Python微信公众号开发

    2018-01-26 09:19:58
    摘要: 大三上的时候,对微信公众号开发浅尝辄止的玩了一下,感觉还是挺有意思的。http://blog.csdn.net/marksinoberg/article/details/54235271 后来服务器到期了,也就搁置了。 大三上的时候,对微信公众号...
  • 说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! ... 一丶叙述 开发说明 Python代码实现(以Flask框架为例) ... 客户端---->微信服务器---->nginx服务器---->开发者服务器 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,183
精华内容 12,873
关键字:

微信公众号开发python

python 订阅