使用新浪微博开放平台api同步微博内容至自己网站

使用新浪微博开放平台api同步微博内容至自己网站

使用新浪微博开放平台api同步微博内容至自己网站(关于我们Bootstrap中文网--创建于2012年的网站show出来吧)

网站优化优采云 发表了文章 • 0 个评论 • 47 次浏览 • 2022-01-01 01:16 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(关于我们Bootstrap中文网--创建于2012年的网站show出来吧)
  关于我们
  Bootstrap中文网——成立于2012年,原因是国内没有关于Bootstrap的好的中文教程和交流渠道。为此,我们翻译整理了Bootstrap文档,建立了QQ群和微博(@bootcss),以方便大家对这个CSS框架的喜爱。城市老师分享前端设计开发经验。
  展示你的 Bootstrap 作品
  你是 Bootstrap 的粉丝吗?您是否使用 Bootstrap 进行开发?你开发的网站是Powered By Bootstrap吗?然后展示你的网站表演!
  任何已经确认使用Bootstrap CSS框架的网站,我们都会在“Bootstrap优秀站推荐”列表中展示您提交的网站的截图和介绍,并有机会获得用 Bootstrap 中文在网页首页推荐。
  请发邮件至下方邮箱,并在邮件标题中注明(Bootstrap网站提交作品-网站姓名或网址)。
  邮件:
  加入我们
  Bootstrap中文网站致力于前端开发和推广。它坚持共享和开放互联网的精神。它旨在为前端攻城师和设计师之间提供一个交流的平台。如果您和我们有相同的目标,我们很乐意一起工作。行。
  如果你也热爱前端开发、Bootstrap,并且有一颗创业的心,欢迎联系我们,也欢迎你加入我们的团队!
  邮件: 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(关于我们Bootstrap中文网--创建于2012年的网站show出来吧)
  关于我们
  Bootstrap中文网——成立于2012年,原因是国内没有关于Bootstrap的好的中文教程和交流渠道。为此,我们翻译整理了Bootstrap文档,建立了QQ群和微博(@bootcss),以方便大家对这个CSS框架的喜爱。城市老师分享前端设计开发经验。
  展示你的 Bootstrap 作品
  你是 Bootstrap 的粉丝吗?您是否使用 Bootstrap 进行开发?你开发的网站是Powered By Bootstrap吗?然后展示你的网站表演!
  任何已经确认使用Bootstrap CSS框架的网站,我们都会在“Bootstrap优秀站推荐”列表中展示您提交的网站的截图和介绍,并有机会获得用 Bootstrap 中文在网页首页推荐。
  请发邮件至下方邮箱,并在邮件标题中注明(Bootstrap网站提交作品-网站姓名或网址)。
  邮件:
  加入我们
  Bootstrap中文网站致力于前端开发和推广。它坚持共享和开放互联网的精神。它旨在为前端攻城师和设计师之间提供一个交流的平台。如果您和我们有相同的目标,我们很乐意一起工作。行。
  如果你也热爱前端开发、Bootstrap,并且有一颗创业的心,欢迎联系我们,也欢迎你加入我们的团队!
  邮件:

使用新浪微博开放平台api同步微博内容至自己网站(如何把这种方法应用在组织学习中成为越来越的网络应用)

网站优化优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-01-01 01:15 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(如何把这种方法应用在组织学习中成为越来越的网络应用)
  毫无疑问,微博已经成为越来越流行的网络应用程序。如何将这种方法应用到组织学习中,使其成为一种非正式的学习方式,是很多培训管理者思考的问题。
  以新浪微博为例,企业学习推广的方式大致可以分为两种:一是直接应用模式,即直接使用新浪微博辅助培训业务,这是初级应用阶段二、内部 实施模式是在企业内部部署一套专属的企业微博,并在此基础上开始组织内部的社会化学习。这个模型比较复杂,但意义深远。是微博推广企业学习的高级阶段。本文将详细介绍这两种模式的应用方法、内容和要点。
  
  
  直接申请模式
  直接应用模式的目标是通过微博辅助传统培训业务。培训部可以通过建立培训部微博账号、协助培训项目、推广企业e-Learning等方式,达到直接申请模式的效果。
  创建微博账号的培训部门是机构的内部服务部门。一般来说,企业的培训部门没有自己的网站,缺乏与员工的沟通。因此,培训部自己的微博的创建可以作为在线服务窗口。银联培训中心、用友大学、吉利大学等企业培训中心或企业大学均建立了自己的微博账号。
  创建微博账号非常简单,只需在新浪微博上申请即可。需要注意的是,最好申请新浪代理认证。认证通过后,可以使用的微博功能将更多,包括:展示培训中心的视频或图片,专门设置咨询、留言、表扬和意见窗口,展示培训团队成员的风采。
  多功能辅助培训项目拥有专属微博账号后,培训中心可深度应用各种微博功能,辅助传统面授培训项目。新浪微博汇聚了上千款功能应用,其中不少可以辅助面授培训。我们列出了一些可以辅助训练的最常见的微博功能。
  微博大屏 “微博大屏”更适合参与人数较多的培训项目,其价值在于能够激活培训现场的互动氛围。在培训过程中,可以使用独立投影将微博大屏幕的内容投影到培训现场。讲师可以通过大屏幕采集学员的意见,学员可以通过手机微博参与培训和互动过程。有关示例,请参见图 1。
  微活动“微活动”是一个非常好的培训营销工具,适合在培训项目的前期招收学员。如果学员的微博渗透率高,可以通过“微活动”的形式开展培训项目。在“微活动”中,可以设置奖品、目标粉丝等功能,配合粉丝转发,起到培训营销的作用(见图表2).
  微群微群可以设置和邀请固定成员加入,类似QQ群的功能(见图3),适合辅助期长的培训项目。讲师或培训经理可以通过微群发布通知,< @文章、上传附件等,也可以要求学员在微群讨论问题或提交作业。培训项目结束后,微群可以解散或保留,成为积累培训资源的平台。
  促进企业电子学习。一般来说,企业在线学习侧重于自主学习,学习者之间缺乏互动。虽然有的公司在学习平台开设了BBS讨论区,但在大多数情况下,人气并不旺。培训管理者可以考虑将微博与在线学习相结合,通过微博代码嵌入等功能增强在线学习的互动性。具体可以通过以下方式实现。
  加强在线课程的互动活动。在微博上发布与在线课程话题相关的微博,引发学习者对内容的讨论,并将讨论地址链接到课程介绍等明显位置。本质是每门课程为在线课程创建一个微博讨论区。建立方式有两种:一是培训管理员可以在发布课程时同时创建微博并设置课程链接;二、直接在课件中嵌入微博讨论区的永久链接,让学习者在学习课件时可以随时进入微博参与互动。
  聚合在线学习和网络资源。通过微博的关键词聚合功能,可以将课件的内容与微博平台的内容关联起来。在海量的微博内容中,所有与网络课程相关的微博内容都可以被提取出来并按时间顺序展示在网络课件的指定位置(见图表4)。内容聚合可以让互动更深入, 将学习交流不仅扩展到在线课程的学习者,也扩展到所有微博成员。
  推广和评估在线课程。微博也可以用于在线课程的营销推广和评价,实施方法比较简单。例如,在课程开始或结束时,您可以添加“微博转发”功能,将课程的介绍、链接和简要评价转发到学习者的微博,学习者的粉丝会第一时间看到课程介绍和链接。为了扩大影响力,管理者还可以加入除新浪微博以外的其他社交网络的分享链接。
  内部实施模式 所谓内部实施模式,就是在公司内部建立一个独立完整的微博系统。企业可以在内部微博系统中建立自己的规则,比如添加V认证,风格设计,与企业的学习系统或其他信息系统有更深层次的融合。
  在企业内部建立微博的目的,不仅可以辅助传统的培训业务,还可以利用微博的实施和应用在企业内部进行社交学习,使微博成为员工分享和学习的新平台。
  新浪微博提供了一个免费的企业微博下载版——Xweibo,企业可以内部安装使用。企业版微博(Xweibo)虽然不具备新浪微博的综合功能,但具备微博发布、浏览、转发、评论、采集、话题等基本功能,并且X微博的功能也在不断升级完善本文以X微博系统为例,介绍如何在企业内部实现部署和应用。
  下载安装Xweibo的下载地址为,下载安装页面见图5。安装时需要配合技术部门,做好前期沟通和准备工作。技术人员按照下载包中的说明在企业内网完成安装后,需要进行初始化工作,主要包括以下几个方面。
  ·设置公司微博名称和·设置公司微博与新浪微博的关系·微博页面布局设计·内容规则建立可直接应用。但为了达到更好的效果,通常会与企业的其他业务系统进行集成。特别是与学习管理系统和公司现有的BBS论坛系统深度融合,更方便员工使用。微博提供了一些内置的系统集成工具,企业可以使用这些工具进行简单的集成。
  1. 定义首页链接功能:您可以通过该功能将相关学习系统的链接集成到微博首页。
  2.外部论坛插件功能:通过此功能,Xweibo可以与公司内部BBS论坛同步登录和更新。
  3.外呼工具功能:可以将“转发码”和“异地呼叫码”嵌入学习管理系统、博客、邮箱、OA等系统中,让微博内容可以以各种方式改变。表单在其他系统中显示。
  如果企业需要更深度的整合,增加个性化的功能,开发者需要在X微博上进行高级二次开发。
  只有大规模应用才能推广和应用社交学习的力量。培训经理可以根据业务需要制定推广应用策略和计划。通过企业微博的实施,促进社会学习,必须调动员工的参与度和积极性。根据X微博的特点,企业可以建立以下三种机制,打开快速应用的局面。
  X微博与新浪微博互联互通机制,所有拥有新浪微博账号的员工均可与X微博同步数据。除了微博内容,“粉丝”也可以统一。互联机制可以降低微博使用难度,简化申请流程。但需要注意的是,有些公司不希望员工发布的某些内容同步到互联网上,公司可以通过技术和系统对其进行限制。
  认证机制在企业内部开展“微博加V认证”,培训管理者可以通过这种方式提高员工参与度。 Xweibo的认证可以分类,例如可以分为技术专家、内部讲师、工作专业人士等不同类别(见图表6)。同时,它还可以与“名人管理”合作” 功能控制各类内部组织。有效管理高级和专业群体。Xweibo认证机制也是发现和梳理内部专家的最佳途径之一,将为企业知识的实施提供有效的支持和帮助管理。
  活动机制 在企业内部微博上开展各种活动,增加微博的知名度和活跃气氛。微博内置了两个活动功能模块:一个是“在线直播”,主要辅助企业的大型活动,以及微博平台上活动状态的文字直播。同时,活动现场可以与微博参与者互动;另一个是“在线访谈”与新浪微博的“微访谈”功能基本一致,管理者可以通过该功能设计和安排在线脱口秀,员工可以通过微博实时观看和参与互动。
  此外,培训经理可以考虑将日常工作和各种活动与企业微博相结合。例如,企业微博在培训项目的设计、实施、管理和评估中具有价值。内部微博在辅助培训和员工学习中的应用只是一个开始。作为企业内部的社交软件,它将成为员工之间沟通与协作的重要工具。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(如何把这种方法应用在组织学习中成为越来越的网络应用)
  毫无疑问,微博已经成为越来越流行的网络应用程序。如何将这种方法应用到组织学习中,使其成为一种非正式的学习方式,是很多培训管理者思考的问题。
  以新浪微博为例,企业学习推广的方式大致可以分为两种:一是直接应用模式,即直接使用新浪微博辅助培训业务,这是初级应用阶段二、内部 实施模式是在企业内部部署一套专属的企业微博,并在此基础上开始组织内部的社会化学习。这个模型比较复杂,但意义深远。是微博推广企业学习的高级阶段。本文将详细介绍这两种模式的应用方法、内容和要点。
  
  
  直接申请模式
  直接应用模式的目标是通过微博辅助传统培训业务。培训部可以通过建立培训部微博账号、协助培训项目、推广企业e-Learning等方式,达到直接申请模式的效果。
  创建微博账号的培训部门是机构的内部服务部门。一般来说,企业的培训部门没有自己的网站,缺乏与员工的沟通。因此,培训部自己的微博的创建可以作为在线服务窗口。银联培训中心、用友大学、吉利大学等企业培训中心或企业大学均建立了自己的微博账号。
  创建微博账号非常简单,只需在新浪微博上申请即可。需要注意的是,最好申请新浪代理认证。认证通过后,可以使用的微博功能将更多,包括:展示培训中心的视频或图片,专门设置咨询、留言、表扬和意见窗口,展示培训团队成员的风采。
  多功能辅助培训项目拥有专属微博账号后,培训中心可深度应用各种微博功能,辅助传统面授培训项目。新浪微博汇聚了上千款功能应用,其中不少可以辅助面授培训。我们列出了一些可以辅助训练的最常见的微博功能。
  微博大屏 “微博大屏”更适合参与人数较多的培训项目,其价值在于能够激活培训现场的互动氛围。在培训过程中,可以使用独立投影将微博大屏幕的内容投影到培训现场。讲师可以通过大屏幕采集学员的意见,学员可以通过手机微博参与培训和互动过程。有关示例,请参见图 1。
  微活动“微活动”是一个非常好的培训营销工具,适合在培训项目的前期招收学员。如果学员的微博渗透率高,可以通过“微活动”的形式开展培训项目。在“微活动”中,可以设置奖品、目标粉丝等功能,配合粉丝转发,起到培训营销的作用(见图表2).
  微群微群可以设置和邀请固定成员加入,类似QQ群的功能(见图3),适合辅助期长的培训项目。讲师或培训经理可以通过微群发布通知,< @文章、上传附件等,也可以要求学员在微群讨论问题或提交作业。培训项目结束后,微群可以解散或保留,成为积累培训资源的平台。
  促进企业电子学习。一般来说,企业在线学习侧重于自主学习,学习者之间缺乏互动。虽然有的公司在学习平台开设了BBS讨论区,但在大多数情况下,人气并不旺。培训管理者可以考虑将微博与在线学习相结合,通过微博代码嵌入等功能增强在线学习的互动性。具体可以通过以下方式实现。
  加强在线课程的互动活动。在微博上发布与在线课程话题相关的微博,引发学习者对内容的讨论,并将讨论地址链接到课程介绍等明显位置。本质是每门课程为在线课程创建一个微博讨论区。建立方式有两种:一是培训管理员可以在发布课程时同时创建微博并设置课程链接;二、直接在课件中嵌入微博讨论区的永久链接,让学习者在学习课件时可以随时进入微博参与互动。
  聚合在线学习和网络资源。通过微博的关键词聚合功能,可以将课件的内容与微博平台的内容关联起来。在海量的微博内容中,所有与网络课程相关的微博内容都可以被提取出来并按时间顺序展示在网络课件的指定位置(见图表4)。内容聚合可以让互动更深入, 将学习交流不仅扩展到在线课程的学习者,也扩展到所有微博成员。
  推广和评估在线课程。微博也可以用于在线课程的营销推广和评价,实施方法比较简单。例如,在课程开始或结束时,您可以添加“微博转发”功能,将课程的介绍、链接和简要评价转发到学习者的微博,学习者的粉丝会第一时间看到课程介绍和链接。为了扩大影响力,管理者还可以加入除新浪微博以外的其他社交网络的分享链接。
  内部实施模式 所谓内部实施模式,就是在公司内部建立一个独立完整的微博系统。企业可以在内部微博系统中建立自己的规则,比如添加V认证,风格设计,与企业的学习系统或其他信息系统有更深层次的融合。
  在企业内部建立微博的目的,不仅可以辅助传统的培训业务,还可以利用微博的实施和应用在企业内部进行社交学习,使微博成为员工分享和学习的新平台。
  新浪微博提供了一个免费的企业微博下载版——Xweibo,企业可以内部安装使用。企业版微博(Xweibo)虽然不具备新浪微博的综合功能,但具备微博发布、浏览、转发、评论、采集、话题等基本功能,并且X微博的功能也在不断升级完善本文以X微博系统为例,介绍如何在企业内部实现部署和应用。
  下载安装Xweibo的下载地址为,下载安装页面见图5。安装时需要配合技术部门,做好前期沟通和准备工作。技术人员按照下载包中的说明在企业内网完成安装后,需要进行初始化工作,主要包括以下几个方面。
  ·设置公司微博名称和·设置公司微博与新浪微博的关系·微博页面布局设计·内容规则建立可直接应用。但为了达到更好的效果,通常会与企业的其他业务系统进行集成。特别是与学习管理系统和公司现有的BBS论坛系统深度融合,更方便员工使用。微博提供了一些内置的系统集成工具,企业可以使用这些工具进行简单的集成。
  1. 定义首页链接功能:您可以通过该功能将相关学习系统的链接集成到微博首页。
  2.外部论坛插件功能:通过此功能,Xweibo可以与公司内部BBS论坛同步登录和更新。
  3.外呼工具功能:可以将“转发码”和“异地呼叫码”嵌入学习管理系统、博客、邮箱、OA等系统中,让微博内容可以以各种方式改变。表单在其他系统中显示。
  如果企业需要更深度的整合,增加个性化的功能,开发者需要在X微博上进行高级二次开发。
  只有大规模应用才能推广和应用社交学习的力量。培训经理可以根据业务需要制定推广应用策略和计划。通过企业微博的实施,促进社会学习,必须调动员工的参与度和积极性。根据X微博的特点,企业可以建立以下三种机制,打开快速应用的局面。
  X微博与新浪微博互联互通机制,所有拥有新浪微博账号的员工均可与X微博同步数据。除了微博内容,“粉丝”也可以统一。互联机制可以降低微博使用难度,简化申请流程。但需要注意的是,有些公司不希望员工发布的某些内容同步到互联网上,公司可以通过技术和系统对其进行限制。
  认证机制在企业内部开展“微博加V认证”,培训管理者可以通过这种方式提高员工参与度。 Xweibo的认证可以分类,例如可以分为技术专家、内部讲师、工作专业人士等不同类别(见图表6)。同时,它还可以与“名人管理”合作” 功能控制各类内部组织。有效管理高级和专业群体。Xweibo认证机制也是发现和梳理内部专家的最佳途径之一,将为企业知识的实施提供有效的支持和帮助管理。
  活动机制 在企业内部微博上开展各种活动,增加微博的知名度和活跃气氛。微博内置了两个活动功能模块:一个是“在线直播”,主要辅助企业的大型活动,以及微博平台上活动状态的文字直播。同时,活动现场可以与微博参与者互动;另一个是“在线访谈”与新浪微博的“微访谈”功能基本一致,管理者可以通过该功能设计和安排在线脱口秀,员工可以通过微博实时观看和参与互动。
  此外,培训经理可以考虑将日常工作和各种活动与企业微博相结合。例如,企业微博在培训项目的设计、实施、管理和评估中具有价值。内部微博在辅助培训和员工学习中的应用只是一个开始。作为企业内部的社交软件,它将成为员工之间沟通与协作的重要工具。

使用新浪微博开放平台api同步微博内容至自己网站(这是第一篇:关于uploadAPI的OAuth验证失败问题(组图))

网站优化优采云 发表了文章 • 0 个评论 • 50 次浏览 • 2021-12-31 23:32 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(这是第一篇:关于uploadAPI的OAuth验证失败问题(组图))
  新浪微博很受欢迎,开放平台很受欢迎,开发者很受欢迎。
  开发者受欢迎是因为新浪微博开放平台对开发者非常不友好,其API从实现到文档都很粗糙。
  API 实现不规范,可以容忍,但是文档没有解释清楚,开发者自己探索是很离谱的。新浪似乎还没有来得及照顾第三方开发者,开放平台现在只是“开门见山”。结果就是开发者折腾了很多没有意义的东西,浪费时间!
  我写这一系列文章的目的是为了避免后来者犯同样的罪。
  这是上传AP​​I OAuth认证失败的第一篇。去论坛搜索上传就知道有多少人受苦了。
  Upload API 的 OAuth 之所以难,部分是因为它的 HTTP 请求格式的特殊性,主要是因为新浪微博的实现令人难以置信。
  Upload API 的特殊性在于它的请求“使用多部分/表单数据编码提交”。根据OAuth1.0协议,Content-Type为multipart/form-data的HTTP请求的entity body不参与OAuth签名。因此,上传API的OAuth应该比其他普通API简单,因为签名只涉及OAuth参数(以oauth_开头的一系列特殊参数)。因此,标准的签名基字符串应该是:
  POSThttp%3A%2F %% 2Fstatuses%2Fupload.jsonoauth_consumer_key%3Dxxxxxxxxxx%26oauth_nonce%3D798014939%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1312912324%26oauth_version%3D1312912324%26oauth_version%3D1312912324%26oauth_ytoken0
  对应的标准授权头应该是:
  OAuth oauth_consumer_key=xxxxxxxxxx、oauth_token=yyyyyyyyyy、oauth_signature_method=HMAC-SHA1、oauth_version=1.0、oauth_nonce=798014939、oauth_nonce=798014939、oauth_nonce=798014939、oauth_nonce=798014939、oauth33331231时间oauth_signature_method=HMAC-SHA1
  但是,您会收到:
  40107:Oauth 错误:signature_invalid!
  这是因为新浪微博上传API的实现需要签名基串收录pic以外的参数。所以新浪微博需要的Signature Base String是这样的:
  POSThttp%3A%2F%%2Fstatuses%2Fupload.jsonlat%3D37.78711200%26long%3D-122.40846000%26oauth_consumer_key%3Dxxxxxxxxxx%26oauth%258oth%258oth%26588oth%268588888888888885 _signature_method3 26oauth_timestamp%3D1312912886%26oauth_token%3Dyyyyyyyyyy%26oauth_version%3D1.0%26status%3DPic
  问题出在这里:status、lat、long参数是在entity body中提交的。如前所述,它们不参与 OAuth 签名。为了符合 OAuth 协议,必须将这些参数添加到 URL 查询字符串或 Authorization 标头中。
  规范的开发者这样做了,结果“错了”。新浪微博服务器依旧返回:
  40107:Oauth 错误:signature_invalid!
  其实不管怎么折腾,只要遵循OAuth协议,肯定是甩不掉的,因为新浪微博不遵循OAuth协议。
  对于 Content-Type 为 multipart/form-data 的 HTTP 请求,新浪微博要求非二进制参数(如上传 API 中的 pic 参数)参与 OAuth 签名,并且还要求这些参数是“非原创的” ”。换句话说,Signature Base String 必须收录这些参数,但这些参数不能出现在 URL 查询字符串或 Authorization 标头中。这意味着新浪微博服务器收到请求后,会从实体主体中提取这些参数进行OAuth签名验证。再一次,对于 Content-Type 是 multipart/form-data 的 HTTP 请求,这违反了 OAuth 协议。但是在新浪微博上,我们必须违反OAuth协议才能通过OAuth验证。
  即使你不考虑像我这样费时费力的探索过程,新浪微博的非标准实现也给开发者带来了很多麻烦,因为它导致了很多OAuth库的追随OAuth 协议无法直接使用。
  在折腾的过程中,我还发现了另一个可怕的bug。如果pic的Content-Disposition头部缺少filename参数,新浪微博也会返回“40107:Oauth Error:signature_invalid!”,虽然pic和OAuth没有关系,虽然按照标准是不需要filename的,但实际上文件名在此处没用。
  最后总结一下获取新浪微博上传API的“正确”方式:
  所有参数均以 multipart/form-data 格式提交,不能出现在 URL 查询字符串或 Authorization 标头中。除 pic 外的所有参数都输入 Signature Base String 以参与 OAuth 签名。 pic 的 Content-Disposition 头必须收录 filename 参数。
  官方论坛帮助不大,哭了很多,但是省的少。未做UTF-8编码或URL编码导致OAuth认证失败是开发者自身的错。本文也适用于其他使用 multipart/form-data 编码提交 HTTP 请求的 API,例如 update_profile_image。
  转载原文 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(这是第一篇:关于uploadAPI的OAuth验证失败问题(组图))
  新浪微博很受欢迎,开放平台很受欢迎,开发者很受欢迎。
  开发者受欢迎是因为新浪微博开放平台对开发者非常不友好,其API从实现到文档都很粗糙。
  API 实现不规范,可以容忍,但是文档没有解释清楚,开发者自己探索是很离谱的。新浪似乎还没有来得及照顾第三方开发者,开放平台现在只是“开门见山”。结果就是开发者折腾了很多没有意义的东西,浪费时间!
  我写这一系列文章的目的是为了避免后来者犯同样的罪。
  这是上传AP​​I OAuth认证失败的第一篇。去论坛搜索上传就知道有多少人受苦了。
  Upload API 的 OAuth 之所以难,部分是因为它的 HTTP 请求格式的特殊性,主要是因为新浪微博的实现令人难以置信。
  Upload API 的特殊性在于它的请求“使用多部分/表单数据编码提交”。根据OAuth1.0协议,Content-Type为multipart/form-data的HTTP请求的entity body不参与OAuth签名。因此,上传API的OAuth应该比其他普通API简单,因为签名只涉及OAuth参数(以oauth_开头的一系列特殊参数)。因此,标准的签名基字符串应该是:
  POSThttp%3A%2F %% 2Fstatuses%2Fupload.jsonoauth_consumer_key%3Dxxxxxxxxxx%26oauth_nonce%3D798014939%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1312912324%26oauth_version%3D1312912324%26oauth_version%3D1312912324%26oauth_ytoken0
  对应的标准授权头应该是:
  OAuth oauth_consumer_key=xxxxxxxxxx、oauth_token=yyyyyyyyyy、oauth_signature_method=HMAC-SHA1、oauth_version=1.0、oauth_nonce=798014939、oauth_nonce=798014939、oauth_nonce=798014939、oauth_nonce=798014939、oauth33331231时间oauth_signature_method=HMAC-SHA1
  但是,您会收到:
  40107:Oauth 错误:signature_invalid!
  这是因为新浪微博上传API的实现需要签名基串收录pic以外的参数。所以新浪微博需要的Signature Base String是这样的:
  POSThttp%3A%2F%%2Fstatuses%2Fupload.jsonlat%3D37.78711200%26long%3D-122.40846000%26oauth_consumer_key%3Dxxxxxxxxxx%26oauth%258oth%258oth%26588oth%268588888888888885 _signature_method3 26oauth_timestamp%3D1312912886%26oauth_token%3Dyyyyyyyyyy%26oauth_version%3D1.0%26status%3DPic
  问题出在这里:status、lat、long参数是在entity body中提交的。如前所述,它们不参与 OAuth 签名。为了符合 OAuth 协议,必须将这些参数添加到 URL 查询字符串或 Authorization 标头中。
  规范的开发者这样做了,结果“错了”。新浪微博服务器依旧返回:
  40107:Oauth 错误:signature_invalid!
  其实不管怎么折腾,只要遵循OAuth协议,肯定是甩不掉的,因为新浪微博不遵循OAuth协议。
  对于 Content-Type 为 multipart/form-data 的 HTTP 请求,新浪微博要求非二进制参数(如上传 API 中的 pic 参数)参与 OAuth 签名,并且还要求这些参数是“非原创的” ”。换句话说,Signature Base String 必须收录这些参数,但这些参数不能出现在 URL 查询字符串或 Authorization 标头中。这意味着新浪微博服务器收到请求后,会从实体主体中提取这些参数进行OAuth签名验证。再一次,对于 Content-Type 是 multipart/form-data 的 HTTP 请求,这违反了 OAuth 协议。但是在新浪微博上,我们必须违反OAuth协议才能通过OAuth验证。
  即使你不考虑像我这样费时费力的探索过程,新浪微博的非标准实现也给开发者带来了很多麻烦,因为它导致了很多OAuth库的追随OAuth 协议无法直接使用。
  在折腾的过程中,我还发现了另一个可怕的bug。如果pic的Content-Disposition头部缺少filename参数,新浪微博也会返回“40107:Oauth Error:signature_invalid!”,虽然pic和OAuth没有关系,虽然按照标准是不需要filename的,但实际上文件名在此处没用。
  最后总结一下获取新浪微博上传API的“正确”方式:
  所有参数均以 multipart/form-data 格式提交,不能出现在 URL 查询字符串或 Authorization 标头中。除 pic 外的所有参数都输入 Signature Base String 以参与 OAuth 签名。 pic 的 Content-Disposition 头必须收录 filename 参数。
  官方论坛帮助不大,哭了很多,但是省的少。未做UTF-8编码或URL编码导致OAuth认证失败是开发者自身的错。本文也适用于其他使用 multipart/form-data 编码提交 HTTP 请求的 API,例如 update_profile_image。
  转载原文

使用新浪微博开放平台api同步微博内容至自己网站( api访问:2019-07-15本文章(图))

网站优化优采云 发表了文章 • 0 个评论 • 47 次浏览 • 2021-12-31 11:28 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(
api访问:2019-07-15本文章(图))
  Python访问微博第三方API 2 访问用户登录和微博发布
  时间:2019-07-15
  本文章为大家介绍python访问微博第三方API 2访问用户登录和微博发布,主要包括python访问微博第三方API 2访问用户登录和微博发布使用示例、应用技巧、基础总结知识点和注意事项,有一定的参考价值,有需要的朋友可以参考。
  Python访问微博第三方API 2 访问用户登录和微博发布
  # coding=utf-8
import requests
import json
import MySQLdb
from datetime import datetime
from flask import Flask, redirect, request
app = Flask(__name__)
# 全局变量token
token = {}
def get_ticket():
# App Key:13866668888 app key就是url中的 YOUR_CLIENT_ID
# YOUR_REGISTERED_REDIRECT_URI就是 http://test.chinasoft.com
client_id = 13866668888
redirect_url = "http://test.chinasoft.com/a"
url = 'https://api.weibo.com/oauth2/authorize?client_id={app_key}&response_type=code&redirect_uri={redirect_url}'.format(app_key = client_id, redirect_url = redirect_url)
return url
def get_token(code):
# App Secret:6dc11f2039
redirect_url = "http://test.chinasoft.com/a"
client_secret = "6dc11f2039"
client_id = 13866668888
url = "https://api.weibo.com/oauth2/a ... id%3D{client_id}&client_secret={client_secret}&grant_type=authorization_code&redirect_uri={redirect_url}&code={code}".format(client_id = client_id,client_secret = client_secret,redirect_url = redirect_url,code = code)
resp = requests.post(url)
global token
token = resp.json()
return token
def get_info(access_token, uid):
url = "https://api.weibo.com/2/users/show.json"
resp = requests.get(url, params = {
'access_token':access_token,
'uid':uid
})
return resp.json()
def get_conn():
""" 获取mysql的连接"""
try:
conn = MySQLdb.connect(
host="localhost",
port=3306,
user="root",
password="root",
db="user_grade",
)
except MySQLdb.Error as e:
print("Error %d:%s" % (e.args[0], e.args[1]))
return conn
def weibo_share(access_token):
url = "https://api.weibo.com/2/statuses/share.json"
resp = requests.post(url, {
'access_token':access_token,
'status':'现在是北京时间:{0} http://test.chinasoft.com'.format(datetime.now())
})
return resp.json()
@app.route('/a')
def index():
code = request.args.get('code', None)
# 根据code获取token
token = get_token(code)
# 获取用户信息
user_info = get_info(token['access_token'], token['uid'])
third_id = user_info['id']
nickname = user_info['screen_name']
headimg = user_info['profile_image_url']
# 获取数据库的连接,将用户信息存入到数据库中
# create table user(third_id int,nickname varchar(255),headimg varchar(1000));
conn = get_conn()
cur = conn.cursor()
# 注意 sql中的 values中的字段一定要加 单引号,否则会报错
sql = "insert into user(third_id,nickname,headimg) values('{third_id}','{nickname}','{headimg}')".format(third_id = third_id,nickname = nickname,headimg = headimg)
cur.execute(sql)
conn.autocommit(True)
return json.dumps(user_info)
@app.route('/weibo')
def weibo():
ticket = get_ticket()
return redirect(ticket)
@app.route('/share')
def share():
ticket = get_ticket()
rest = weibo_share(token['access_token'])
return json.dumps(rest)
if __name__ == '__main__':
app.run(port=80, debug=True)
  登录接口
  访问量:5000/微博
  获取令牌 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(
api访问:2019-07-15本文章(图))
  Python访问微博第三方API 2 访问用户登录和微博发布
  时间:2019-07-15
  本文章为大家介绍python访问微博第三方API 2访问用户登录和微博发布,主要包括python访问微博第三方API 2访问用户登录和微博发布使用示例、应用技巧、基础总结知识点和注意事项,有一定的参考价值,有需要的朋友可以参考。
  Python访问微博第三方API 2 访问用户登录和微博发布
  # coding=utf-8
import requests
import json
import MySQLdb
from datetime import datetime
from flask import Flask, redirect, request
app = Flask(__name__)
# 全局变量token
token = {}
def get_ticket():
# App Key:13866668888 app key就是url中的 YOUR_CLIENT_ID
# YOUR_REGISTERED_REDIRECT_URI就是 http://test.chinasoft.com
client_id = 13866668888
redirect_url = "http://test.chinasoft.com/a"
url = 'https://api.weibo.com/oauth2/authorize?client_id={app_key}&response_type=code&redirect_uri={redirect_url}'.format(app_key = client_id, redirect_url = redirect_url)
return url
def get_token(code):
# App Secret:6dc11f2039
redirect_url = "http://test.chinasoft.com/a"
client_secret = "6dc11f2039"
client_id = 13866668888
url = "https://api.weibo.com/oauth2/a ... id%3D{client_id}&client_secret={client_secret}&grant_type=authorization_code&redirect_uri={redirect_url}&code={code}".format(client_id = client_id,client_secret = client_secret,redirect_url = redirect_url,code = code)
resp = requests.post(url)
global token
token = resp.json()
return token
def get_info(access_token, uid):
url = "https://api.weibo.com/2/users/show.json"
resp = requests.get(url, params = {
'access_token':access_token,
'uid':uid
})
return resp.json()
def get_conn():
""" 获取mysql的连接"""
try:
conn = MySQLdb.connect(
host="localhost",
port=3306,
user="root",
password="root",
db="user_grade",
)
except MySQLdb.Error as e:
print("Error %d:%s" % (e.args[0], e.args[1]))
return conn
def weibo_share(access_token):
url = "https://api.weibo.com/2/statuses/share.json"
resp = requests.post(url, {
'access_token':access_token,
'status':'现在是北京时间:{0} http://test.chinasoft.com'.format(datetime.now())
})
return resp.json()
@app.route('/a')
def index():
code = request.args.get('code', None)
# 根据code获取token
token = get_token(code)
# 获取用户信息
user_info = get_info(token['access_token'], token['uid'])
third_id = user_info['id']
nickname = user_info['screen_name']
headimg = user_info['profile_image_url']
# 获取数据库的连接,将用户信息存入到数据库中
# create table user(third_id int,nickname varchar(255),headimg varchar(1000));
conn = get_conn()
cur = conn.cursor()
# 注意 sql中的 values中的字段一定要加 单引号,否则会报错
sql = "insert into user(third_id,nickname,headimg) values('{third_id}','{nickname}','{headimg}')".format(third_id = third_id,nickname = nickname,headimg = headimg)
cur.execute(sql)
conn.autocommit(True)
return json.dumps(user_info)
@app.route('/weibo')
def weibo():
ticket = get_ticket()
return redirect(ticket)
@app.route('/share')
def share():
ticket = get_ticket()
rest = weibo_share(token['access_token'])
return json.dumps(rest)
if __name__ == '__main__':
app.run(port=80, debug=True)
  登录接口
  访问量:5000/微博
  获取令牌

使用新浪微博开放平台api同步微博内容至自己网站(文档_V23.API错误代码说明()(图))

网站优化优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2021-12-30 03:19 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(文档_V23.API错误代码说明()(图))
  文档_V2
  3.API 错误码描述地址:
  4.iOS SDK 地址:
  5.授权机制:
  授权机制说明
  6.开发者管理中心
  利用:
  在管理中心创建自己的应用后,会得到AppKey和App Secret
  这两个值是初始化新浪微博SDK必须用到的两个参数。
  执行登录功能时可能遇到的错误如下
  1:访问错误提示
  
  表示:微博SDK初始化时设置的appRedirectURI和微博开放平台-开发者管理中心-应用信息-高级信息-OAuth2.0 授权设置-授权回调页面
  如果设定值不同,就会出现上述错误。
  
  
  2:调用新浪微博客户端授权后,应用没有正常返回。
  1:检查URL类型“URL方案”是否命名为:sinaweibosso。如图添加AppID:
  
  2:在AppDelegate中是否实现了委托功能:
  -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"%@",url.scheme);
//如果涉及其他应用交互,请做如下判断,例如:还可能和新浪微博进行交互
if ([url.scheme isEqualToString:Key_weiXinAppID]) {
return [WXApi handleOpenURL:url delegate:self];
}else if ([url.scheme isEqualToString:[@"sinaweibosso" stringByAppendingPathExtension:Key_sinaWeiboAppID]])
{
return [[SinaWeiBoManage defaultInstance].sinaWeibo handleOpenURL:url];
}else
{
return YES;
}
}
  完成上述设置后,将无意外地响应授权结果。
  接下来,我们主要开始调用API与微博数据进行交互。
  举个简单的例子,如何获取授权用户的个人信息:
  NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:userId forKey:@"uid"];
[sinaWeibo requestWithURL:@"users/show.json"
params:params
httpMethod:@"GET"
delegate:self];
  具体需要传入的参数请参考官方API文档。
  得到结果后,会响应委托成功或失败:
  这时候可以通过链接名来识别请求类型:
  - (void)request:(SinaWeiboRequest *)request didFailWithError:(NSError *)error
{
//获取关注列表
if ([request.url hasSuffix:@"friendships/friends.json"])
{
if ([delegate respondsToSelector:@selector(sinaWeiBoManage:withFriendListResult:withRequestDataType:isSuccess:)]) {
[delegate sinaWeiBoManage:self withFriendListResult:nil withRequestDataType:self.requestDataType isSuccess:NO];
}
}
}
  关于iOS 6内置微博功能:
  在iOS6中,苹果集成了新浪微博的社交环境,所以如果用户在设置界面对新浪微博账号进行了授权,就可以直接在我们的第三方应用中使用,用于发布微博等。
  先介绍两个新框架
  他们是:
  Accounts.framework:用于在系统设置中获取账户信息
  Social.framework:用于与第三方开放平台进行数据交互。
  该过程分为两个步骤:
  首先要知道用户是否在系统设置中对相应的账号进行了授权。
  获取到相应的账号信息后,即可开始与第三方开放平台进行数据交互,代码如下:
  // Create an account store object. 创建账户集合
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
// Create an account type that ensures Twitter accounts are retrieved. 确定好 账户类型 新浪微博 还是 Facebook 还是 Twitter
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierSinaWeibo];
// Request access from the user to use their Twitter accounts. //异步请求 来得到对应类型的账户信息
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
if(granted) {//如果 granted 返回 NO 表示一个账户都没有设置
// Get the list of Twitter accounts.
NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; //可能存在多个,看你要用哪个,最好让用户选择一下

// For the sake of brevity, we&#39;ll assume there is only one Twitter account present.
// You would ideally ask the user which account they want to tweet from, if there is more than one Twitter account present.
if ([accountsArray count] > 0) {
// Grab the initial Twitter account to tweet from.
ACAccount *sinaWeiboAccount = [accountsArray objectAtIndex:0];

NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"一条新的微博" forKey:@"status"];
SLRequest *slRequest = [SLRequest requestForServiceType:SLServiceTypeSinaWeibo requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://open.weibo.cn/2/statuses/update.json"] parameters:params];
slRequest.account = sinaWeiboAccount;//这行代码一定要赋值,负责数据交互一定失败
[slRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSLog(@"%@ %@",urlResponse.URL,error);

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dic);
}];

}
}
}];
  获得每个 ACAccount 后,它就有了一个标识符。最好在用户确认使用哪个账号的时候保存,这样下次可以直接通过下面的代码获取对应的账号
  [accountStore accountWithIdentifier:sinaWeiboAccount.identifier];
  总结:
  SNS作为应用推广的主要方式,必须认真研究。如何唤起和激发用户的分享欲望,让更多人知道你的应用,那么成功就在不远处。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(文档_V23.API错误代码说明()(图))
  文档_V2
  3.API 错误码描述地址:
  4.iOS SDK 地址:
  5.授权机制:
  授权机制说明
  6.开发者管理中心
  利用:
  在管理中心创建自己的应用后,会得到AppKey和App Secret
  这两个值是初始化新浪微博SDK必须用到的两个参数。
  执行登录功能时可能遇到的错误如下
  1:访问错误提示
  
  表示:微博SDK初始化时设置的appRedirectURI和微博开放平台-开发者管理中心-应用信息-高级信息-OAuth2.0 授权设置-授权回调页面
  如果设定值不同,就会出现上述错误。
  
  
  2:调用新浪微博客户端授权后,应用没有正常返回。
  1:检查URL类型“URL方案”是否命名为:sinaweibosso。如图添加AppID:
  
  2:在AppDelegate中是否实现了委托功能:
  -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"%@",url.scheme);
//如果涉及其他应用交互,请做如下判断,例如:还可能和新浪微博进行交互
if ([url.scheme isEqualToString:Key_weiXinAppID]) {
return [WXApi handleOpenURL:url delegate:self];
}else if ([url.scheme isEqualToString:[@"sinaweibosso" stringByAppendingPathExtension:Key_sinaWeiboAppID]])
{
return [[SinaWeiBoManage defaultInstance].sinaWeibo handleOpenURL:url];
}else
{
return YES;
}
}
  完成上述设置后,将无意外地响应授权结果。
  接下来,我们主要开始调用API与微博数据进行交互。
  举个简单的例子,如何获取授权用户的个人信息:
  NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:userId forKey:@"uid"];
[sinaWeibo requestWithURL:@"users/show.json"
params:params
httpMethod:@"GET"
delegate:self];
  具体需要传入的参数请参考官方API文档。
  得到结果后,会响应委托成功或失败:
  这时候可以通过链接名来识别请求类型:
  - (void)request:(SinaWeiboRequest *)request didFailWithError:(NSError *)error
{
//获取关注列表
if ([request.url hasSuffix:@"friendships/friends.json"])
{
if ([delegate respondsToSelector:@selector(sinaWeiBoManage:withFriendListResult:withRequestDataType:isSuccess:)]) {
[delegate sinaWeiBoManage:self withFriendListResult:nil withRequestDataType:self.requestDataType isSuccess:NO];
}
}
}
  关于iOS 6内置微博功能:
  在iOS6中,苹果集成了新浪微博的社交环境,所以如果用户在设置界面对新浪微博账号进行了授权,就可以直接在我们的第三方应用中使用,用于发布微博等。
  先介绍两个新框架
  他们是:
  Accounts.framework:用于在系统设置中获取账户信息
  Social.framework:用于与第三方开放平台进行数据交互。
  该过程分为两个步骤:
  首先要知道用户是否在系统设置中对相应的账号进行了授权。
  获取到相应的账号信息后,即可开始与第三方开放平台进行数据交互,代码如下:
  // Create an account store object. 创建账户集合
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
// Create an account type that ensures Twitter accounts are retrieved. 确定好 账户类型 新浪微博 还是 Facebook 还是 Twitter
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierSinaWeibo];
// Request access from the user to use their Twitter accounts. //异步请求 来得到对应类型的账户信息
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
if(granted) {//如果 granted 返回 NO 表示一个账户都没有设置
// Get the list of Twitter accounts.
NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; //可能存在多个,看你要用哪个,最好让用户选择一下

// For the sake of brevity, we&#39;ll assume there is only one Twitter account present.
// You would ideally ask the user which account they want to tweet from, if there is more than one Twitter account present.
if ([accountsArray count] > 0) {
// Grab the initial Twitter account to tweet from.
ACAccount *sinaWeiboAccount = [accountsArray objectAtIndex:0];

NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"一条新的微博" forKey:@"status"];
SLRequest *slRequest = [SLRequest requestForServiceType:SLServiceTypeSinaWeibo requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://open.weibo.cn/2/statuses/update.json"] parameters:params];
slRequest.account = sinaWeiboAccount;//这行代码一定要赋值,负责数据交互一定失败
[slRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSLog(@"%@ %@",urlResponse.URL,error);

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dic);
}];

}
}
}];
  获得每个 ACAccount 后,它就有了一个标识符。最好在用户确认使用哪个账号的时候保存,这样下次可以直接通过下面的代码获取对应的账号
  [accountStore accountWithIdentifier:sinaWeiboAccount.identifier];
  总结:
  SNS作为应用推广的主要方式,必须认真研究。如何唤起和激发用户的分享欲望,让更多人知道你的应用,那么成功就在不远处。

使用新浪微博开放平台api同步微博内容至自己网站(文本中要加入安全域名下的一个网址,敲黑板!)

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2021-12-30 03:15 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(文本中要加入安全域名下的一个网址,敲黑板!)
  一、说明
  2017-06-26 微博公告,对界面做了一些改动:
  statuses/repost 转发一条微博
statuses/update 发布一条微博
statuses/upload 上传图片并发布一条微博
statuses/upload_url_text 发布一条微博同时指定上传的图片
statuses/destroy 删除微博
  上面的接口被取消了。
  (网上大部分资料都是老界面写的,难怪我用老界面好久没成功,汗)
  改用新界面:状态/分享第三方分享链接到微博
  先看一下接口的说明:
  
  图片.png
  我们可以看到status参数的描述特别长。
  有一句话需要特别注意:
  “同时,正文中必须至少收录
一个分享到微博的第三方网页网址,且该网址只能是第三方(调用方)绑定域下的URL链接。绑定域在“我的”应用-应用信息-编辑基本应用信息-在“安全域名”中设置。
  官方用词晦涩难懂,但通俗易懂:
  “文本中必须收录
一个网址,该网址不能是随机的,必须是应用后台设置的安全域名下的网址。”
  二、具体用途
  什么是“安全域名”?我读书少,所以不要假装是 13。
  还记得在哪里填写“申请地址”和“申请资料”吗?
  
  图片.png
  然后它在右边看起来像这样:
  
  图片.png
  你看见了吗?这是一个安全的域名。如果您的信息在此处为空,请快速设置。
  需要注意的一件事是:
  
  图片.png
  这个好像不用加“”,不然会报错。
  如果它不起作用,您也可以使用我的:
  (我也用别人的)
  那么重点来了!敲黑板!!敲黑板!!!
  我们需要在文本中添加安全域名下的URL,这次我们需要添加“”,像这样:
  
  图片.png
  发布后是这样的:
  
  F7B691B(`05(LJ_NGOGW4`T.jpg
  如果没有设置安全域名或文本中不收录
安全域名,则会出现错误:
  {"error":"text not find domain!","error_code":10017,"request":"/2/statuses/share.json"}
  关于“必须做URLencode”,我没有做这一步,但是不影响简单的微博发布。
  以后的问题,可能只会出在这个地方,所以提醒一下。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(文本中要加入安全域名下的一个网址,敲黑板!)
  一、说明
  2017-06-26 微博公告,对界面做了一些改动:
  statuses/repost 转发一条微博
statuses/update 发布一条微博
statuses/upload 上传图片并发布一条微博
statuses/upload_url_text 发布一条微博同时指定上传的图片
statuses/destroy 删除微博
  上面的接口被取消了。
  (网上大部分资料都是老界面写的,难怪我用老界面好久没成功,汗)
  改用新界面:状态/分享第三方分享链接到微博
  先看一下接口的说明:
  
  图片.png
  我们可以看到status参数的描述特别长。
  有一句话需要特别注意:
  “同时,正文中必须至少收录
一个分享到微博的第三方网页网址,且该网址只能是第三方(调用方)绑定域下的URL链接。绑定域在“我的”应用-应用信息-编辑基本应用信息-在“安全域名”中设置。
  官方用词晦涩难懂,但通俗易懂:
  “文本中必须收录
一个网址,该网址不能是随机的,必须是应用后台设置的安全域名下的网址。”
  二、具体用途
  什么是“安全域名”?我读书少,所以不要假装是 13。
  还记得在哪里填写“申请地址”和“申请资料”吗?
  
  图片.png
  然后它在右边看起来像这样:
  
  图片.png
  你看见了吗?这是一个安全的域名。如果您的信息在此处为空,请快速设置。
  需要注意的一件事是:
  
  图片.png
  这个好像不用加“”,不然会报错。
  如果它不起作用,您也可以使用我的:
  (我也用别人的)
  那么重点来了!敲黑板!!敲黑板!!!
  我们需要在文本中添加安全域名下的URL,这次我们需要添加“”,像这样:
  
  图片.png
  发布后是这样的:
  
  F7B691B(`05(LJ_NGOGW4`T.jpg
  如果没有设置安全域名或文本中不收录
安全域名,则会出现错误:
  {"error":"text not find domain!","error_code":10017,"request":"/2/statuses/share.json"}
  关于“必须做URLencode”,我没有做这一步,但是不影响简单的微博发布。
  以后的问题,可能只会出在这个地方,所以提醒一下。

使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台API的调用和TWITTER接口一样,都是受限的)

网站优化优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2021-12-29 19:10 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台API的调用和TWITTER接口一样,都是受限的)
  新浪微博开放平台API调用与TWITTER接口相同,均以小时为单位进行限制和限制。
  他有两个限制原则
  1.用户不按IP限制登录,每小时1000次
  2. 用户以基于用户的限制登录,每小时1000次
  如果应用是用户未登录,则IP被限制。建议登录破解瓶颈,否则不讨论。
  新浪给出了具体限制
  开发者可以通过 rate_limit_status 接口查看调用频率
  rate_limit_status 接口文档
  接口返回如下信息
  数组([remaining_hits] =&gt; 999 [hourly_limit] =&gt; 1000 [reset_time_in_seconds] =&gt; 2717 [reset_time] =&gt; 12 月 14 日星期二 17:00:00 +0800 2010)
  代表
  剩余数量为999次,
  每小时限制1000次,
  计数器清零剩余时间2717秒,
  下次重置时间为17:00。
  这样的调用频率对于非授权的小应用来说已经不够用了。最简单的方法是使用多个账号和多个APP_KEY,相当于做一个账号轮询。
  首先,多注册几个微博账号,将它们存储在一个数组中,每次随机调用一个,这样可以轻松使限制达到3000。
  $wb_id = array(,, );
  列表($wb_name,$wb_password)=explode(“|”,$wb_id[array_rand($wb_id)]);
  如果用同样的方法列出几个APP_KEY,重复组合,就会更多。比如2个APP_KEY,3个账号,上限可以达到6000。
  我个人用了3个APP_KEY,4个账号,每小时1.2万就够了。
  快速注册微博账号的另一种方式
  第一步,
  去gmail注册一个长账号,多长时间?反正越长越好,一个原则信比你想注册的微博账号长
  例如
  第二步,
  使用此账号在新浪注册
  第一次使用
  第二次使用
  第三次使用
  ....
  以此类推,一个邮箱可以注册多个新浪微博。无需来回重新注册邮箱。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台API的调用和TWITTER接口一样,都是受限的)
  新浪微博开放平台API调用与TWITTER接口相同,均以小时为单位进行限制和限制。
  他有两个限制原则
  1.用户不按IP限制登录,每小时1000次
  2. 用户以基于用户的限制登录,每小时1000次
  如果应用是用户未登录,则IP被限制。建议登录破解瓶颈,否则不讨论。
  新浪给出了具体限制
  开发者可以通过 rate_limit_status 接口查看调用频率
  rate_limit_status 接口文档
  接口返回如下信息
  数组([remaining_hits] =&gt; 999 [hourly_limit] =&gt; 1000 [reset_time_in_seconds] =&gt; 2717 [reset_time] =&gt; 12 月 14 日星期二 17:00:00 +0800 2010)
  代表
  剩余数量为999次,
  每小时限制1000次,
  计数器清零剩余时间2717秒,
  下次重置时间为17:00。
  这样的调用频率对于非授权的小应用来说已经不够用了。最简单的方法是使用多个账号和多个APP_KEY,相当于做一个账号轮询。
  首先,多注册几个微博账号,将它们存储在一个数组中,每次随机调用一个,这样可以轻松使限制达到3000。
  $wb_id = array(,, );
  列表($wb_name,$wb_password)=explode(“|”,$wb_id[array_rand($wb_id)]);
  如果用同样的方法列出几个APP_KEY,重复组合,就会更多。比如2个APP_KEY,3个账号,上限可以达到6000。
  我个人用了3个APP_KEY,4个账号,每小时1.2万就够了。
  快速注册微博账号的另一种方式
  第一步,
  去gmail注册一个长账号,多长时间?反正越长越好,一个原则信比你想注册的微博账号长
  例如
  第二步,
  使用此账号在新浪注册
  第一次使用
  第二次使用
  第三次使用
  ....
  以此类推,一个邮箱可以注册多个新浪微博。无需来回重新注册邮箱。

使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站!)

网站优化优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2021-12-28 09:01 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站!)
  使用新浪微博开放平台api同步微博内容至自己网站!开放平台开放了不止一项开放接口,同时还提供数据抓取接口供大家方便快捷的搜索到数据。欢迎大家使用新浪微博开放平台,有需要的朋友可以私信我。如果你也需要一份专业的微博python开发指南,欢迎在简书留言。
  用python保存每条微博到excel表。需要转载/收藏微博时,按比例分析转载数量获取转发数量、点赞数量、评论数量。根据相应关键字追加微博,保存在excel表格中。
  github-myblogpicker-知乎专栏微博数据库文档。可以根据需要定制增删改查,相当不错。
  爬虫和数据库分析类库不错,
  即刻采集了最受欢迎排行榜、发现频道排行榜、问答、评论排行榜、特色排行榜、热门采访等数十大排行榜分类。通过直接获取公共注册账号的公共发言、评论数据,或者分析出不同用户的喜好,满足你想知道某一条微博是否被采集的需求。例如:根据发起发起人、话题类型、话题热度、发帖时间、微博简介等分析微博热度,以及用户的最爱。
  文章采集方面,还有新浪微博采集器这是一款相当好用的采集器,直接下载安装,不要wifi什么都,随用随开,实时采集,采自己想采的数据,
  foobar2000, 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站!)
  使用新浪微博开放平台api同步微博内容至自己网站!开放平台开放了不止一项开放接口,同时还提供数据抓取接口供大家方便快捷的搜索到数据。欢迎大家使用新浪微博开放平台,有需要的朋友可以私信我。如果你也需要一份专业的微博python开发指南,欢迎在简书留言。
  用python保存每条微博到excel表。需要转载/收藏微博时,按比例分析转载数量获取转发数量、点赞数量、评论数量。根据相应关键字追加微博,保存在excel表格中。
  github-myblogpicker-知乎专栏微博数据库文档。可以根据需要定制增删改查,相当不错。
  爬虫和数据库分析类库不错,
  即刻采集了最受欢迎排行榜、发现频道排行榜、问答、评论排行榜、特色排行榜、热门采访等数十大排行榜分类。通过直接获取公共注册账号的公共发言、评论数据,或者分析出不同用户的喜好,满足你想知道某一条微博是否被采集的需求。例如:根据发起发起人、话题类型、话题热度、发帖时间、微博简介等分析微博热度,以及用户的最爱。
  文章采集方面,还有新浪微博采集器这是一款相当好用的采集器,直接下载安装,不要wifi什么都,随用随开,实时采集,采自己想采的数据,
  foobar2000,

使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图) )

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2021-12-26 03:11 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图)
)
  最近在研究使用Python制作各种类型的机器人。今天给大家分享一个自动发布新浪微博的机器人。
  基本思想
  其实实现一个简单的微博机器人并不难。你只需要每天准时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。
  材料
  素材方面,我这里选择的是金山词霸的每日一句英文,我们可以爬取本网站的相关信息,组成我们的微博素材。
  微博接口
  微博为开发者提供开放平台
  当然,在使用这个平台之前,我们仍然需要注册并创建一个应用程序。比如像我一样,创建一个应用程序
  
  然后我们还需要设置一个安全域名(以后发布微博时会用到),在应用信息-&gt;基本信息中设置。
  
  还需要设置应用回调地址,在应用信息-&gt;高级信息中设置。
  
  当然,对于微博API的调用,我们可以使用其他人打包的第三方库,操作起来更加方便。我这里用了一个叫“weibo”的库,直接用pip安装。
  pip 安装微博
  但是我遇到了一个安装问题,错误如下
  Traceback (most recent call last):
File "setup.py", line 15, in
long_description=open(&#39;README.rst&#39;).read(),
UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0xae in position 241: illegal multibyte sequence
  好像是编码问题,我们可以通过修改源代码来规避
  
  long_description=open(&#39;README.rst&#39;, encoding=&#39;utf-8&#39;).read(),
  python setup.py build
python setup.py install
  至此就可以成功安装微博库了
  准备工作和写作思路就是这些,下面我们来看看具体的过程和代码
  自动发布微博
  根据微博库的文档,使用它来操作微博是比较容易的。您只需要在我们创建微博应用时提供App Key和App Secret以及应用回调地址信息即可。简单的调用代码如下
  from weibo import Client
c = Client(&#39;App Key&#39;, &#39;App Secret&#39;, &#39;https://www.luobodazahui.top&#39;, username=&#39;username&#39;, password=&#39;password&#39;)
c.post(&#39;statuses/share&#39;, status=&#39;haha&#39; + 安全域名)
  我们运行代码,如果没有任何反应,我们将可以在该帐户下的微博中看到刚刚发布的微博。
  
  最简单的微博已经发布成功了,那么我们可以发布带图片的微博,我们试试吧
  根据接口status/share的文档,我们可以传入pic参数来上传图片
  
  我们传入 pic 参数并尝试
  f = open(&#39;4.png&#39;, &#39;rb&#39;)
c.post(&#39;statuses/share&#39;, status=&#39;haha&#39; + 安全域名, pic=f)
f.close()
  是的,它可以正常发布带图片的微博
  
  那么现在微博的自动发布就完成了,下面我们来看看如何自动获取微博素材
  微博素材
  对于金山词霸的每日一句,我们可以使用以下API获取每日信息
  可以看到界面返回如下信息
  
  我们可以直接使用requests库来调用这个接口
  import requests
url = &#39;http://open.iciba.com/dsapi/&#39;
res = requests.get(url)
content_e = res.json()[&#39;content&#39;]
content_c = res.json()[&#39;note&#39;]
content = content_e + &#39;\n&#39; + content_c
content_t = res.json()[&#39;picture2&#39;]
  现在我们封装两个函数来完成功能
  def weibo(content, picture):
ff = requests.get(picture).content
c = Client(app_key, app_secret, &#39;https://www.luobodazahui.top&#39;, username=username, password=password)
c.post(&#39;statuses/share&#39;, status=content + &#39;https://www.luobodazahui.com&#39;, pic=ff)
def auto_weibo():
url = &#39;http://open.iciba.com/dsapi/&#39;
res = requests.get(url)
content_e = res.json()[&#39;content&#39;]
content_c = res.json()[&#39;note&#39;]
content = content_e + &#39;\n&#39; + content_c
content_t = res.json()[&#39;picture2&#39;]
weibo(content, content_t)
return &#39;OK&#39;
  现在我们可以创建一个定时任务,每天7点运行脚本。
  0 7 * * * python auto_weibo.py
  最终效果如下
   查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图)
)
  最近在研究使用Python制作各种类型的机器人。今天给大家分享一个自动发布新浪微博的机器人。
  基本思想
  其实实现一个简单的微博机器人并不难。你只需要每天准时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。
  材料
  素材方面,我这里选择的是金山词霸的每日一句英文,我们可以爬取本网站的相关信息,组成我们的微博素材。
  微博接口
  微博为开发者提供开放平台
  当然,在使用这个平台之前,我们仍然需要注册并创建一个应用程序。比如像我一样,创建一个应用程序
  
  然后我们还需要设置一个安全域名(以后发布微博时会用到),在应用信息-&gt;基本信息中设置。
  
  还需要设置应用回调地址,在应用信息-&gt;高级信息中设置。
  
  当然,对于微博API的调用,我们可以使用其他人打包的第三方库,操作起来更加方便。我这里用了一个叫“weibo”的库,直接用pip安装。
  pip 安装微博
  但是我遇到了一个安装问题,错误如下
  Traceback (most recent call last):
File "setup.py", line 15, in
long_description=open(&#39;README.rst&#39;).read(),
UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0xae in position 241: illegal multibyte sequence
  好像是编码问题,我们可以通过修改源代码来规避
  
  long_description=open(&#39;README.rst&#39;, encoding=&#39;utf-8&#39;).read(),
  python setup.py build
python setup.py install
  至此就可以成功安装微博库了
  准备工作和写作思路就是这些,下面我们来看看具体的过程和代码
  自动发布微博
  根据微博库的文档,使用它来操作微博是比较容易的。您只需要在我们创建微博应用时提供App Key和App Secret以及应用回调地址信息即可。简单的调用代码如下
  from weibo import Client
c = Client(&#39;App Key&#39;, &#39;App Secret&#39;, &#39;https://www.luobodazahui.top&#39;, username=&#39;username&#39;, password=&#39;password&#39;)
c.post(&#39;statuses/share&#39;, status=&#39;haha&#39; + 安全域名)
  我们运行代码,如果没有任何反应,我们将可以在该帐户下的微博中看到刚刚发布的微博。
  
  最简单的微博已经发布成功了,那么我们可以发布带图片的微博,我们试试吧
  根据接口status/share的文档,我们可以传入pic参数来上传图片
  
  我们传入 pic 参数并尝试
  f = open(&#39;4.png&#39;, &#39;rb&#39;)
c.post(&#39;statuses/share&#39;, status=&#39;haha&#39; + 安全域名, pic=f)
f.close()
  是的,它可以正常发布带图片的微博
  
  那么现在微博的自动发布就完成了,下面我们来看看如何自动获取微博素材
  微博素材
  对于金山词霸的每日一句,我们可以使用以下API获取每日信息
  可以看到界面返回如下信息
  
  我们可以直接使用requests库来调用这个接口
  import requests
url = &#39;http://open.iciba.com/dsapi/&#39;
res = requests.get(url)
content_e = res.json()[&#39;content&#39;]
content_c = res.json()[&#39;note&#39;]
content = content_e + &#39;\n&#39; + content_c
content_t = res.json()[&#39;picture2&#39;]
  现在我们封装两个函数来完成功能
  def weibo(content, picture):
ff = requests.get(picture).content
c = Client(app_key, app_secret, &#39;https://www.luobodazahui.top&#39;, username=username, password=password)
c.post(&#39;statuses/share&#39;, status=content + &#39;https://www.luobodazahui.com&#39;, pic=ff)
def auto_weibo():
url = &#39;http://open.iciba.com/dsapi/&#39;
res = requests.get(url)
content_e = res.json()[&#39;content&#39;]
content_c = res.json()[&#39;note&#39;]
content = content_e + &#39;\n&#39; + content_c
content_t = res.json()[&#39;picture2&#39;]
weibo(content, content_t)
return &#39;OK&#39;
  现在我们可以创建一个定时任务,每天7点运行脚本。
  0 7 * * * python auto_weibo.py
  最终效果如下
  

使用新浪微博开放平台api同步微博内容至自己网站(微博模拟登录这是本次爬取 )

网站优化优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2021-12-26 00:06 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(微博模拟登录这是本次爬取
)
  微博模拟登录
  这是这次爬取的网址:
  一、请求分析
  找到登录位置,填写用户名和密码登录
  
  查看响应此请求的数据
  
  这是来自响应的数据,保存它
  exectime: 8
nonce: "HW9VSX"
pcid: "gz-4ede4c6269a09f5b7a6490f790b4aa944eec"
pubkey: "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
retcode: 0
rsakv: "1330428213"
servertime: 1568257059
  继续完善登录操作,输入密码,点击登录按钮
  
  经过分析,发现改变的参数是sp、nonce、servetime。servetime 是当前时间戳,我们只需要找到另外两个参数的生成方法即可。对了,su的参数是base64加密生成的
  二、求sp,nonce的加密方式
  这次我不会使用搜索关键字来查找加密位置。
  
  找到调用函数的位置,打个断点,然后登录
  
  经过js代码流程调试和分析,我们终于找到了加密的位置
  
  简单介绍如何调试js代码
  
  找到sp,nonce的位置,通过python代码实现其加密方法
  
  sp是通过rsa加密和加密生成的。rsa的具体用法可以通过百度查到。或者通过sha1加密生成。至于他是怎么得到me.rsaPubkey的,他只是在我们点击登录之前发送了一个请求,该请求的响应数据中收录
了它。如果你测试更多次,你会发现这个值是固定的。所以我们也可以直接使用它而无需请求访问。
  nonce:在没有点击登录之前,它也出现在请求的响应数据中。但是,我们多次点击登录,都没有找到这个请求。nonce 的值每次都不同。所以必须是本地js文件的某个函数生成的,不需要请求服务器去获取。我们在这里找到了 nonce 生成函数
  
  
  import random
import rsa
import hashlib
from binascii import b2a_hex
def get_nonce(n):
result = ""
random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i in range(n):
index = random.randint(0, len(random_str) - 1)
result += random_str[index]
return result
def get_sp_rsa(password, servertime, nonce):
key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
pubkey = rsa.PublicKey(int(key, 16), int("10001", 16))
res = rsa.encrypt(bytes("" + "\t".join([servertime, nonce]) + "\n" + password,encoding="utf-8"), pubkey)
return b2a_hex(res)
def get_sp_sha1(password, servertime, nonce):
res = hashlib.sha1(bytes("" + hashlib.sha1(bytes(hashlib.sha1(bytes(password, encoding="utf-8")).hexdigest(),encoding="utf-8")).hexdigest() + servertime + nonce,encoding="utf-8")).hexdigest()
return res
  三、响应数据
  请求参数分析基本完成,这次输入正确的用户名和密码。响应数据是什么?
  
  打开fiddler,然后退出当前账号,重新登录。fiddler 上会有很多请求。找到需要的请求,查看响应内容
  
  
  
  这样做时,每个响应都将设置 cookie。所以按照上面的流程,识别登录的cookie肯定是可用的。之后,就拿着这个cookie做其他的操作吧。
  最后附上代码
  import requests, random, time, rsa, hashlib, base64, re, json
from binascii import b2a_hex
class WeiBo:
def __init__(self):
self.session = requests.Session()
self.headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
def login(self, account, password):
api = "https://login.sina.com.cn/sso/ ... in.js(v1.4.19)"
nonce = self._get_nonce()
servertime = self._get_now_time()
sp = self._get_sp_rsa(password, servertime, nonce)
su = self._get_su(account)
data = {
"entry": "weibo",
"gateway": "1",
"from": "",
"savestate": "7",
"qrcode_flag": "false",
"useticket": "1",
"pagerefer": "https://login.sina.com.cn/cros ... ot%3B,
"vsnf": "1",
"su": su,
"service": "miniblog",
"servertime": servertime,
"nonce": nonce,
"pwencode": "rsa2",
"rsakv": "1330428213",
"sp": sp,
"sr": "1920*1080",
"encoding": "UTF - 8",
"prelt": "149",
"url": "https://weibo.com/ajaxlogin.ph ... ot%3B,
"returntype": "META",
}
headers = self.headers.copy()
headers.update({
"Host": "login.sina.com.cn",
"Origin": "https://weibo.com",
"Referer": "https://weibo.com/"
})
response = self.session.post(api, headers=headers, data=data, allow_redirects=False)
search_result = self._re_search("location.replace\(\"(.*?)\"", response.text)
redirct_url = search_result and search_result.group(1)
if not redirct_url:
raise Exception("重定向url获取失败")
response = self.session.get(redirct_url, headers=headers.update({
"Referer": "https://login.sina.com.cn/sso/ ... in.js(v1.4.19)"
}), allow_redirects=False)
search_result = self._re_search('"arrURL":(.*?)}', response.text)
redirct_urls = search_result and search_result.group(1)
if not redirct_urls:
raise Exception("重定向url获取失败")
redirct_url_list = json.loads(redirct_urls)
userId = ""
for url in redirct_url_list:
response = self.session.get(url, headers=self.headers)
if url.startswith("https://passport.weibo.com/wbsso/login"):
userId = self._re_search('"uniqueid":"(.*?)"', response.text).group(1)
if not userId:
raise Exception("userId获取失败")
user_details_url = "https://weibo.com/u/{}/home?wvr=5&lf=reg".format(userId)
response = self.session.get(user_details_url, headers={
"Referer": "https://weibo.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
})
if self._re_search(userId, response.text):
print("登录成功")
print(self.session.cookies)
else:
print("登录失败")
def _get_nonce(self):
nonce = ""
random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i in range(5):
index = random.randint(0, len(random_str) - 1)
nonce += random_str[index]
return nonce
def _get_now_time(self):
return str(int(time.time()))
def _get_sp_rsa(self, password, servertime, nonce):
key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
pubkey = rsa.PublicKey(int(key, 16), int("10001", 16))
res = rsa.encrypt(bytes("" + "\t".join([servertime, nonce]) + "\n" + password, encoding="utf-8"), pubkey)
return b2a_hex(res)
def _get_sp_sha1(self, password, servertime, nonce):
res = hashlib.sha1(bytes("" + hashlib.sha1(bytes(hashlib.sha1(bytes(password, encoding="utf-8")).hexdigest(),
encoding="utf-8")).hexdigest() + servertime + nonce,
encoding="utf-8")).hexdigest()
return res
def _get_su(self, account):
return str(base64.b64encode(bytes(account, encoding="utf-8")), encoding="utf-8")
def _re_search(self, pattern, html):
return re.search(pattern, html, re.S)
def test(self):
self.login("18716758777", "123456")
if __name__ == '__main__':
wb = WeiBo()
wb.test() 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(微博模拟登录这是本次爬取
)
  微博模拟登录
  这是这次爬取的网址:
  一、请求分析
  找到登录位置,填写用户名和密码登录
  
  查看响应此请求的数据
  
  这是来自响应的数据,保存它
  exectime: 8
nonce: "HW9VSX"
pcid: "gz-4ede4c6269a09f5b7a6490f790b4aa944eec"
pubkey: "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
retcode: 0
rsakv: "1330428213"
servertime: 1568257059
  继续完善登录操作,输入密码,点击登录按钮
  
  经过分析,发现改变的参数是sp、nonce、servetime。servetime 是当前时间戳,我们只需要找到另外两个参数的生成方法即可。对了,su的参数是base64加密生成的
  二、求sp,nonce的加密方式
  这次我不会使用搜索关键字来查找加密位置。
  
  找到调用函数的位置,打个断点,然后登录
  
  经过js代码流程调试和分析,我们终于找到了加密的位置
  
  简单介绍如何调试js代码
  
  找到sp,nonce的位置,通过python代码实现其加密方法
  
  sp是通过rsa加密和加密生成的。rsa的具体用法可以通过百度查到。或者通过sha1加密生成。至于他是怎么得到me.rsaPubkey的,他只是在我们点击登录之前发送了一个请求,该请求的响应数据中收录
了它。如果你测试更多次,你会发现这个值是固定的。所以我们也可以直接使用它而无需请求访问。
  nonce:在没有点击登录之前,它也出现在请求的响应数据中。但是,我们多次点击登录,都没有找到这个请求。nonce 的值每次都不同。所以必须是本地js文件的某个函数生成的,不需要请求服务器去获取。我们在这里找到了 nonce 生成函数
  
  
  import random
import rsa
import hashlib
from binascii import b2a_hex
def get_nonce(n):
result = ""
random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i in range(n):
index = random.randint(0, len(random_str) - 1)
result += random_str[index]
return result
def get_sp_rsa(password, servertime, nonce):
key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
pubkey = rsa.PublicKey(int(key, 16), int("10001", 16))
res = rsa.encrypt(bytes("" + "\t".join([servertime, nonce]) + "\n" + password,encoding="utf-8"), pubkey)
return b2a_hex(res)
def get_sp_sha1(password, servertime, nonce):
res = hashlib.sha1(bytes("" + hashlib.sha1(bytes(hashlib.sha1(bytes(password, encoding="utf-8")).hexdigest(),encoding="utf-8")).hexdigest() + servertime + nonce,encoding="utf-8")).hexdigest()
return res
  三、响应数据
  请求参数分析基本完成,这次输入正确的用户名和密码。响应数据是什么?
  
  打开fiddler,然后退出当前账号,重新登录。fiddler 上会有很多请求。找到需要的请求,查看响应内容
  
  
  
  这样做时,每个响应都将设置 cookie。所以按照上面的流程,识别登录的cookie肯定是可用的。之后,就拿着这个cookie做其他的操作吧。
  最后附上代码
  import requests, random, time, rsa, hashlib, base64, re, json
from binascii import b2a_hex
class WeiBo:
def __init__(self):
self.session = requests.Session()
self.headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
def login(self, account, password):
api = "https://login.sina.com.cn/sso/ ... in.js(v1.4.19)"
nonce = self._get_nonce()
servertime = self._get_now_time()
sp = self._get_sp_rsa(password, servertime, nonce)
su = self._get_su(account)
data = {
"entry": "weibo",
"gateway": "1",
"from": "",
"savestate": "7",
"qrcode_flag": "false",
"useticket": "1",
"pagerefer": "https://login.sina.com.cn/cros ... ot%3B,
"vsnf": "1",
"su": su,
"service": "miniblog",
"servertime": servertime,
"nonce": nonce,
"pwencode": "rsa2",
"rsakv": "1330428213",
"sp": sp,
"sr": "1920*1080",
"encoding": "UTF - 8",
"prelt": "149",
"url": "https://weibo.com/ajaxlogin.ph ... ot%3B,
"returntype": "META",
}
headers = self.headers.copy()
headers.update({
"Host": "login.sina.com.cn",
"Origin": "https://weibo.com",
"Referer": "https://weibo.com/"
})
response = self.session.post(api, headers=headers, data=data, allow_redirects=False)
search_result = self._re_search("location.replace\(\"(.*?)\"", response.text)
redirct_url = search_result and search_result.group(1)
if not redirct_url:
raise Exception("重定向url获取失败")
response = self.session.get(redirct_url, headers=headers.update({
"Referer": "https://login.sina.com.cn/sso/ ... in.js(v1.4.19)"
}), allow_redirects=False)
search_result = self._re_search('"arrURL":(.*?)}', response.text)
redirct_urls = search_result and search_result.group(1)
if not redirct_urls:
raise Exception("重定向url获取失败")
redirct_url_list = json.loads(redirct_urls)
userId = ""
for url in redirct_url_list:
response = self.session.get(url, headers=self.headers)
if url.startswith("https://passport.weibo.com/wbsso/login";):
userId = self._re_search('"uniqueid":"(.*?)"', response.text).group(1)
if not userId:
raise Exception("userId获取失败")
user_details_url = "https://weibo.com/u/{}/home?wvr=5&lf=reg".format(userId)
response = self.session.get(user_details_url, headers={
"Referer": "https://weibo.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
})
if self._re_search(userId, response.text):
print("登录成功")
print(self.session.cookies)
else:
print("登录失败")
def _get_nonce(self):
nonce = ""
random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i in range(5):
index = random.randint(0, len(random_str) - 1)
nonce += random_str[index]
return nonce
def _get_now_time(self):
return str(int(time.time()))
def _get_sp_rsa(self, password, servertime, nonce):
key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
pubkey = rsa.PublicKey(int(key, 16), int("10001", 16))
res = rsa.encrypt(bytes("" + "\t".join([servertime, nonce]) + "\n" + password, encoding="utf-8"), pubkey)
return b2a_hex(res)
def _get_sp_sha1(self, password, servertime, nonce):
res = hashlib.sha1(bytes("" + hashlib.sha1(bytes(hashlib.sha1(bytes(password, encoding="utf-8")).hexdigest(),
encoding="utf-8")).hexdigest() + servertime + nonce,
encoding="utf-8")).hexdigest()
return res
def _get_su(self, account):
return str(base64.b64encode(bytes(account, encoding="utf-8")), encoding="utf-8")
def _re_search(self, pattern, html):
return re.search(pattern, html, re.S)
def test(self):
self.login("18716758777", "123456")
if __name__ == '__main__':
wb = WeiBo()
wb.test()

使用新浪微博开放平台api同步微博内容至自己网站( 如何自动将的Twitter信息同步到国内的新浪微博(图))

网站优化优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2021-12-25 13:28 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(
如何自动将的Twitter信息同步到国内的新浪微博(图))
  
  如何将推特信息自动同步到新浪微博、开心网、人人网等国内SNS网站。有大约一小时的时差。这个时差是由 TwitterFeed 引起的。同时,这种方法的设置比较繁琐,需要多次翻墙。
  于是,我开始尝试一种新的同步方式,开发了一个Python程序,可以定时自动读取和同步推特信息,简化同步过程,缩短同步时间,实现基本的实时同步功能。原同步流程图为:推特-&gt;appspot-&gt;twitterfeed-&gt;ping.fm-&gt;customurl-&gt;火兔-&gt;新浪微博,新的同步流程变为:twitter-&gt;appspot-&gt;火兔-&gt;新浪微博,步骤大大简化了,只需在GAE上设置一个定时执行的定时任务即可。
  因为 GAE 支持 Cron Job 调度任务,所以我们的 Python 程序可以每分钟自动调用一次。打电话时,首先从推特上抓取用户的最新消息。抓取成功后,消息会同步到听火。然后分发到新浪微博、开心网等,如果设置为每分钟执行一次,同步时差只有一分钟左右,基本实现了Twitter信息实时同步到SNS等网站的功能新浪微博。
  我在GAE上调试了程序Python程序,不流畅。我按照官方说明配置了cron.yaml文件,但是更新了Twitter.py后,cron作业计划任务还是不行,后台也看不到相关的cron。工作任务。
  经过一番研究,终于解决了GAE中Python的Cron Job定时任务的问题。原因很简单,因为我的“Google App Engine SDK for Python”是很久以前安装的,当时GAE还不支持定时任务。无法更新 cron.yaml 文件。重新下载最新版本的“Google App Engine SDK for Python”并安装后,Cron Job定时任务更新成功。
  然而,新的问题又来了。我发现当应用程序调用Twitter API 时,失败率非常高。在几乎一半的情况下,它会提示“超出速率限制。客户端每小时不能发出超过 150 个请求”。。” 这让我怀疑是不是GAE的外部IP很小,有很多第三方程序在GAE上调用Twitter API,导致每小时调用超过150次。不然我自己的调用肯定不会有这么高的频率,可能是因为推特没有把GAE的IP设置为白名单。如果有一天推特不限制GAE的IP,应该没有问题。
  安装说明:
  下载,用TortoiseSVN查看SVN地址,然后编辑app.yaml,改成你的appspot应用名,然后修改twitter.py文件最后一行改你的推特用户名,嘟嘟火兔用户名和密码分别填写。cron.yaml文件中收录
了定时任务设置,然后就可以按照本文的方法发布,执行appcfg.py更新目录名,使用Gmail账号和密码发布即可。
  发布后,GAE 可以定期执行 twitter.py 程序。由于定时执行最小可以设置为1分钟,所以同步速度非常快,基本可以达到实时自动同步的效果。
  
  () () 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(
如何自动将的Twitter信息同步到国内的新浪微博(图))
  
  如何将推特信息自动同步到新浪微博、开心网、人人网等国内SNS网站。有大约一小时的时差。这个时差是由 TwitterFeed 引起的。同时,这种方法的设置比较繁琐,需要多次翻墙。
  于是,我开始尝试一种新的同步方式,开发了一个Python程序,可以定时自动读取和同步推特信息,简化同步过程,缩短同步时间,实现基本的实时同步功能。原同步流程图为:推特-&gt;appspot-&gt;twitterfeed-&gt;ping.fm-&gt;customurl-&gt;火兔-&gt;新浪微博,新的同步流程变为:twitter-&gt;appspot-&gt;火兔-&gt;新浪微博,步骤大大简化了,只需在GAE上设置一个定时执行的定时任务即可。
  因为 GAE 支持 Cron Job 调度任务,所以我们的 Python 程序可以每分钟自动调用一次。打电话时,首先从推特上抓取用户的最新消息。抓取成功后,消息会同步到听火。然后分发到新浪微博、开心网等,如果设置为每分钟执行一次,同步时差只有一分钟左右,基本实现了Twitter信息实时同步到SNS等网站的功能新浪微博。
  我在GAE上调试了程序Python程序,不流畅。我按照官方说明配置了cron.yaml文件,但是更新了Twitter.py后,cron作业计划任务还是不行,后台也看不到相关的cron。工作任务。
  经过一番研究,终于解决了GAE中Python的Cron Job定时任务的问题。原因很简单,因为我的“Google App Engine SDK for Python”是很久以前安装的,当时GAE还不支持定时任务。无法更新 cron.yaml 文件。重新下载最新版本的“Google App Engine SDK for Python”并安装后,Cron Job定时任务更新成功。
  然而,新的问题又来了。我发现当应用程序调用Twitter API 时,失败率非常高。在几乎一半的情况下,它会提示“超出速率限制。客户端每小时不能发出超过 150 个请求”。。” 这让我怀疑是不是GAE的外部IP很小,有很多第三方程序在GAE上调用Twitter API,导致每小时调用超过150次。不然我自己的调用肯定不会有这么高的频率,可能是因为推特没有把GAE的IP设置为白名单。如果有一天推特不限制GAE的IP,应该没有问题。
  安装说明:
  下载,用TortoiseSVN查看SVN地址,然后编辑app.yaml,改成你的appspot应用名,然后修改twitter.py文件最后一行改你的推特用户名,嘟嘟火兔用户名和密码分别填写。cron.yaml文件中收录
了定时任务设置,然后就可以按照本文的方法发布,执行appcfg.py更新目录名,使用Gmail账号和密码发布即可。
  发布后,GAE 可以定期执行 twitter.py 程序。由于定时执行最小可以设置为1分钟,所以同步速度非常快,基本可以达到实时自动同步的效果。
  
  () ()

使用新浪微博开放平台api同步微博内容至自己网站(写个一条怎么火起来?一条B/S架构分析)

网站优化优采云 发表了文章 • 0 个评论 • 38 次浏览 • 2021-12-25 04:07 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(写个一条怎么火起来?一条B/S架构分析)
  还在想着写个例子来实际使用新浪的api。结果,实验室的考勤机着火了。8日下午盯着微博,看到那条微博的转发量从一开始是一点点增长,然后是后面快速增长。所以我想写点什么来分析微博是如何流行起来的。
  因为擅长写B/S项目,所以先确定这个分析工具是B/S结构,然后考虑应该提供什么功能。
  首先想到的是粉丝的增长。折线图可用于显示显示。横轴是时间,纵轴是风扇数量。但是我去新浪找了一个可以实现这个功能的api。新浪提供的最新api是friends/followers(获取用户的粉丝列表),但是返回值不包括成为粉丝的时间。我现在能想象的数据库表的设计大概就是一个用户的表,然后这个表里面有一列follower,里面的值就是用户的id。在这种情况下,真的没有地方可以存放成为粉丝的时间。(我不知道实际情况是否如此)。因此,此功能暂时不可用。
  想到的第二件事是粉丝的分布。条形图可用于显示。横轴为省,纵轴为风扇数。新浪提供的api(friendships/followers:获取用户的粉丝列表)可以获取粉丝所在的省份(.getProvince(),返回一个数字),然后根据api(common/get省份:获取列表省),就可以得到号码对应的省的名称,所以在前台得到你要找的微博的名称,然后用ext来绘制地图。效果如下:
  
  (上图中统计时间为2012-3-12 9:20 PM,总粉丝数4770)
  开发笔记:
  1. 认证相关:使用OAuth认证。有一个登录页面 login.jsp 和一个回调页面 index.jsp。在login.jsp中打开新浪的认证页面,认证成功后跳转到回调页面索引。jsp(需要同时在应用应用场所和项目中配置回调页面,见上一篇博文)。这时候index.jsp的地址栏中有一个code值(下一步使用),使用request.getParameter("code")获取这个值,然后执行oauth.getAccessTokenByCode(code).getAccessToken () 获取最重要的accessToken。有了这个值,认证就被认为是成功的。这个值基本用于后续调用api,所以存储在session中(session.setAttribute("accessToken", 访问令牌))。至此,认证成功。但是有一个问题,刷新index.jsp的时候,会报错“error:invalid_grant error_code:21325/oauth2/access_token”,所以改一下,开头先判断session.getAttribute("accessToken")是否可用index.jsp 的值,如果没有认证,如果没有操作。这个改动后报错,报错是空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。
  2.friendships/followers 的参数是screen_name(用户昵称)、count(单页返回的记录条数,默认50条,最大20条0)、cursor(那个返回结果,默认为0),表示一次只能返回200条记录,所以需要执行多次,每次执行后可以得到此时光标的位置根据users.getNextCursor(),得到这个值,然后作为下一次执行的参数cursor的值,我用的是do-while方法,循环的条件是users.getNextCursor( ) 不为 0(因为当最后一次执行完成时,users.getNextCursor()=0)。
  3. 如何存储一个省的人数:用一个大小为100的数组a来存储一个省的人数,初始值为0,省代码为数组编号(例如,北京的省代码是11,粉丝的省是11点,a[11]++)。
  4. 按人数从大到小排序:设置两个参数(int big=0 和 int p=-1) 遍历数组一次,最大的用来存储最大值找到了,p用来存放对应的省份代码,使用do-while循环,循环条件p!=-1,时间复杂度为100*n(人数不为0的省份) .
  5. 省码转对应省的方式:common/get Province可以得到省列表,这个api的参数是country(国家码),我一开始用的是086,结果是都是空的。,然后再根据另一个接口common/get_country(获取国家列表)才发现中国的代码应该是001(呃...)。在新浪提供的例子中,我没有找到获取省份列表的接口,所以我模仿写了一个,返回值是JSONArray的格式,然后使用json.getString(index)获取索引组,然后字符串(例如:{"001011","Beijing"})处理并获取与省号对应的省名。为了减少接口调用次数,
  存在的问题:
  1. 更改用户昵称点击查询,然后在原图下方生成一张图片。最好让原图消失,然后在这个位置重新生成新图。这个应该是前台代码有问题。ext应该比较熟悉和熟悉。
  2.friendships/followers 最多返回5000条记录,所以如果follower超过5000,只能分析最近5000follower的分布。(马上就要破五千了啊啊啊)
  3. 粉丝总数应显示在图片或网页上
  4.现在速度很慢。4770粉丝号用了20多秒才放出图片。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(写个一条怎么火起来?一条B/S架构分析)
  还在想着写个例子来实际使用新浪的api。结果,实验室的考勤机着火了。8日下午盯着微博,看到那条微博的转发量从一开始是一点点增长,然后是后面快速增长。所以我想写点什么来分析微博是如何流行起来的。
  因为擅长写B/S项目,所以先确定这个分析工具是B/S结构,然后考虑应该提供什么功能。
  首先想到的是粉丝的增长。折线图可用于显示显示。横轴是时间,纵轴是风扇数量。但是我去新浪找了一个可以实现这个功能的api。新浪提供的最新api是friends/followers(获取用户的粉丝列表),但是返回值不包括成为粉丝的时间。我现在能想象的数据库表的设计大概就是一个用户的表,然后这个表里面有一列follower,里面的值就是用户的id。在这种情况下,真的没有地方可以存放成为粉丝的时间。(我不知道实际情况是否如此)。因此,此功能暂时不可用。
  想到的第二件事是粉丝的分布。条形图可用于显示。横轴为省,纵轴为风扇数。新浪提供的api(friendships/followers:获取用户的粉丝列表)可以获取粉丝所在的省份(.getProvince(),返回一个数字),然后根据api(common/get省份:获取列表省),就可以得到号码对应的省的名称,所以在前台得到你要找的微博的名称,然后用ext来绘制地图。效果如下:
  
  (上图中统计时间为2012-3-12 9:20 PM,总粉丝数4770)
  开发笔记:
  1. 认证相关:使用OAuth认证。有一个登录页面 login.jsp 和一个回调页面 index.jsp。在login.jsp中打开新浪的认证页面,认证成功后跳转到回调页面索引。jsp(需要同时在应用应用场所和项目中配置回调页面,见上一篇博文)。这时候index.jsp的地址栏中有一个code值(下一步使用),使用request.getParameter("code")获取这个值,然后执行oauth.getAccessTokenByCode(code).getAccessToken () 获取最重要的accessToken。有了这个值,认证就被认为是成功的。这个值基本用于后续调用api,所以存储在session中(session.setAttribute("accessToken", 访问令牌))。至此,认证成功。但是有一个问题,刷新index.jsp的时候,会报错“error:invalid_grant error_code:21325/oauth2/access_token”,所以改一下,开头先判断session.getAttribute("accessToken")是否可用index.jsp 的值,如果没有认证,如果没有操作。这个改动后报错,报错是空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。
  2.friendships/followers 的参数是screen_name(用户昵称)、count(单页返回的记录条数,默认50条,最大20条0)、cursor(那个返回结果,默认为0),表示一次只能返回200条记录,所以需要执行多次,每次执行后可以得到此时光标的位置根据users.getNextCursor(),得到这个值,然后作为下一次执行的参数cursor的值,我用的是do-while方法,循环的条件是users.getNextCursor( ) 不为 0(因为当最后一次执行完成时,users.getNextCursor()=0)。
  3. 如何存储一个省的人数:用一个大小为100的数组a来存储一个省的人数,初始值为0,省代码为数组编号(例如,北京的省代码是11,粉丝的省是11点,a[11]++)。
  4. 按人数从大到小排序:设置两个参数(int big=0 和 int p=-1) 遍历数组一次,最大的用来存储最大值找到了,p用来存放对应的省份代码,使用do-while循环,循环条件p!=-1,时间复杂度为100*n(人数不为0的省份) .
  5. 省码转对应省的方式:common/get Province可以得到省列表,这个api的参数是country(国家码),我一开始用的是086,结果是都是空的。,然后再根据另一个接口common/get_country(获取国家列表)才发现中国的代码应该是001(呃...)。在新浪提供的例子中,我没有找到获取省份列表的接口,所以我模仿写了一个,返回值是JSONArray的格式,然后使用json.getString(index)获取索引组,然后字符串(例如:{"001011","Beijing"})处理并获取与省号对应的省名。为了减少接口调用次数,
  存在的问题:
  1. 更改用户昵称点击查询,然后在原图下方生成一张图片。最好让原图消失,然后在这个位置重新生成新图。这个应该是前台代码有问题。ext应该比较熟悉和熟悉。
  2.friendships/followers 最多返回5000条记录,所以如果follower超过5000,只能分析最近5000follower的分布。(马上就要破五千了啊啊啊)
  3. 粉丝总数应显示在图片或网页上
  4.现在速度很慢。4770粉丝号用了20多秒才放出图片。

使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台APIforWinRT:新浪,人人,街旁等 )

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2021-12-23 13:24 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台APIforWinRT:新浪,人人,街旁等
)
  【前言】
  现在各大网站都推出了自己的Web Api,如:新浪、腾讯、人人网、记边等,这些Web API大多遵循REST架构风格,通过json格式的数据进行交互。
  网站 描述接口时也有示例json数据。我们知道在开发静态语言客户端的时候,因为你没有这些实体的定义,所以需要对这些代码逐行进行编码。
  所以@韦恩NBA 和我(@原数据)在 网站 上使用这些示例 json 开发了这个框架,以自动生成这些定义(实体类)以简化开发。它包括:t4、RestApiCore、
  OAuthLib、MVVMCommon。项目地址:上网查了一下,新浪没有提供winRT下的SDK,所以有如下子项目。
  【新浪微博WinRT开放平台SDK】
  WinRT新浪微博开放平台API是基于新浪微博开放平台第二版API接口封装的Windows 8平台软件开发包(Xaml应用)。
  该SDK帮助.Net平台开发者在Windows 8移动平台上快速轻松地开发微博相关应用。
  下载 SDK:
  【特征】
  1. 内置新浪授权页面授权流程
  2. 异步编程框架,支持 async/await 关键字(无回调回调)
  3. 支持新浪微博新版API v2.0
  
  所有API的提示都和网站上的一样,方便用户快速上手。
  
  登录示例代码:
  public class LoginViewModel : SinaWeibo_Win8AppStore.Common.BindableBase
{
private const string AppKey = "{your key}";
private const string AppSecret = "{your secret}";
private const string Callback = "{your callbackURL}";
public async Task LoginAsync()
{
var weibo = new SinaWeiboClientV2.WeiboClientV2();
weibo.Initialize(AppKey, AppSecret, Callback);
var json = Windows.Storage.ApplicationData.Current.LocalSettings.Values["AccessToken"] as string;
if (!string.IsNullOrEmpty(json))
{
weibo.AccessToken = await JsonConvert.DeserializeObjectAsync(json);
}

if (weibo.AccessToken == null)
{
// 认证
await weibo.AuthenticateAsync();
}
// 授权
await weibo.AuthorizeAccessAsync(System.Threading.CancellationToken.None);
Windows.Storage.ApplicationData.Current.LocalSettings.Values["AccessToken"] =
await JsonConvert.SerializeObjectAsync(weibo.CurrentAuthToken.ContextData["AccessToken"]);
return weibo;
}
}
  使用 WinRT 的 WebAuthenticationBroker 进行应用程序授权。
  (下载示例的孩子,不要忘记在你的应用中添加一个测试账号,否则临时应用的授权将不会通过)
  
  发微博示例代码:
  var request = new SinaWeiboClientV2.StatusesUpdate.Request { Status = this.InputArea.Text };
var response = await Weibo.ExecuteStatusesUpdateAsync(request);
  上传图片的示例代码:
  var fileInfo = new RestAPICore.FileUploadInfo();
fileInfo.LocalPath = ImageFile.Name;
fileInfo.StreamFactory = GetImageFile(ImageFile);
var request = new SinaWeiboClientV2.StatusesUpload.Request
{
Status = this.InputArea.Text,
Pic = fileInfo
};
var response = await Weibo.ExecuteStatusesUploadAsync(request);
  private async Task GetImageFile(StorageFile file)
{
    var s = await file.OpenAsync(FileAccessMode.Read);
    return s.AsStream();
}
  阅读以下最新微博的示例代码:
   var response = await Weibo.ExecuteStatusesFriendsTimelineAsync(request);
if (string.IsNullOrEmpty(_maxId))
{
foreach (var item in response.Value.Statuses)
{
_statusFriendsTimeline.Add(item);
}
}
  附上,如何设置测试账号:
   查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台APIforWinRT:新浪,人人,街旁等
)
  【前言】
  现在各大网站都推出了自己的Web Api,如:新浪、腾讯、人人网、记边等,这些Web API大多遵循REST架构风格,通过json格式的数据进行交互。
  网站 描述接口时也有示例json数据。我们知道在开发静态语言客户端的时候,因为你没有这些实体的定义,所以需要对这些代码逐行进行编码。
  所以@韦恩NBA 和我(@原数据)在 网站 上使用这些示例 json 开发了这个框架,以自动生成这些定义(实体类)以简化开发。它包括:t4、RestApiCore、
  OAuthLib、MVVMCommon。项目地址:上网查了一下,新浪没有提供winRT下的SDK,所以有如下子项目。
  【新浪微博WinRT开放平台SDK】
  WinRT新浪微博开放平台API是基于新浪微博开放平台第二版API接口封装的Windows 8平台软件开发包(Xaml应用)。
  该SDK帮助.Net平台开发者在Windows 8移动平台上快速轻松地开发微博相关应用。
  下载 SDK:
  【特征】
  1. 内置新浪授权页面授权流程
  2. 异步编程框架,支持 async/await 关键字(无回调回调)
  3. 支持新浪微博新版API v2.0
  
  所有API的提示都和网站上的一样,方便用户快速上手。
  
  登录示例代码:
  public class LoginViewModel : SinaWeibo_Win8AppStore.Common.BindableBase
{
private const string AppKey = "{your key}";
private const string AppSecret = "{your secret}";
private const string Callback = "{your callbackURL}";
public async Task LoginAsync()
{
var weibo = new SinaWeiboClientV2.WeiboClientV2();
weibo.Initialize(AppKey, AppSecret, Callback);
var json = Windows.Storage.ApplicationData.Current.LocalSettings.Values["AccessToken"] as string;
if (!string.IsNullOrEmpty(json))
{
weibo.AccessToken = await JsonConvert.DeserializeObjectAsync(json);
}

if (weibo.AccessToken == null)
{
// 认证
await weibo.AuthenticateAsync();
}
// 授权
await weibo.AuthorizeAccessAsync(System.Threading.CancellationToken.None);
Windows.Storage.ApplicationData.Current.LocalSettings.Values["AccessToken"] =
await JsonConvert.SerializeObjectAsync(weibo.CurrentAuthToken.ContextData["AccessToken"]);
return weibo;
}
}
  使用 WinRT 的 WebAuthenticationBroker 进行应用程序授权。
  (下载示例的孩子,不要忘记在你的应用中添加一个测试账号,否则临时应用的授权将不会通过)
  
  发微博示例代码:
  var request = new SinaWeiboClientV2.StatusesUpdate.Request { Status = this.InputArea.Text };
var response = await Weibo.ExecuteStatusesUpdateAsync(request);
  上传图片的示例代码:
  var fileInfo = new RestAPICore.FileUploadInfo();
fileInfo.LocalPath = ImageFile.Name;
fileInfo.StreamFactory = GetImageFile(ImageFile);
var request = new SinaWeiboClientV2.StatusesUpload.Request
{
Status = this.InputArea.Text,
Pic = fileInfo
};
var response = await Weibo.ExecuteStatusesUploadAsync(request);
  private async Task GetImageFile(StorageFile file)
{
    var s = await file.OpenAsync(FileAccessMode.Read);
    return s.AsStream();
}
  阅读以下最新微博的示例代码:
   var response = await Weibo.ExecuteStatusesFriendsTimelineAsync(request);
if (string.IsNullOrEmpty(_maxId))
{
foreach (var item in response.Value.Statuses)
{
_statusFriendsTimeline.Add(item);
}
}
  附上,如何设置测试账号:
  

使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图))

网站优化优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2021-12-21 21:07 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图))
  最近在研究使用Python制作各种类型的机器人。今天给大家分享一个自动发布新浪微博的机器人。
  基本思想
  其实实现一个简单的自动发布微博的微博机器人并不难。你只需要每天准时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。
  材料
  材料方面,我选择了金山词霸的每日一句。我们可以抓取这个网站的相关信息来组成我们的微博素材。
  微博接口
  微博为开发者提供开放平台
  当然,在使用这个平台之前,我们仍然需要注册并创建一个应用程序。比如像我一样,创建一个应用程序
  
  然后我们还需要设置一个安全域名(以后发布微博时会用到),在应用信息-&gt;基本信息中设置。
  
  还需要设置应用回调地址,在应用信息-&gt;高级信息中设置。
  
  当然,对于微博API的调用,我们可以使用别人打包的第三方库,操作起来更方便。这里我使用了一个名为“weibo”的库,直接使用pip安装。
  pip 安装微博
  但是我遇到了一个安装问题,错误如下
  Traceback (most recent call last):
File "setup.py", line 15, in
long_description=open('README.rst').read(),
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 241: illegal multibyte sequence
  好像是编码问题,我们可以通过修改源代码来规避
  
  long_description=open('README.rst', encoding='utf-8').read(),
  python setup.py build
python setup.py install
  至此就可以成功安装微博库了
  准备工作和写作思路就是这些,下面我们来看看具体的过程和代码
  Python自动发布微博
  根据微博库的文档,操作微博还是比较好用的。您只需要在我们创建微博应用时提供App Key和App Secret以及应用回调地址信息即可。简单的调用代码如下
  from weibo import Client
c = Client('App Key', 'App Secret', 'https://www.luobodazahui.top', username='username', password='password')
c.post('statuses/share', status='haha' + 安全域名)
  我们运行代码,如果没有任何反应,我们将可以在该帐户下的微博中看到刚刚发布的微博。
  
  最简单的微博已经发布成功了,那么我们可以发布带图片的微博,我们试试吧
  根据接口status/share的文档,我们可以传入pic参数来上传图片
  
  我们传入 pic 参数并尝试
  f = open('4.png', 'rb')
c.post('statuses/share', status='haha' + 安全域名, pic=f)
f.close()
  是的,它可以正常发布带图片的微博
  
  那么现在微博的自动发布就完成了,下面我们来看看如何自动获取微博素材
  微博素材
  对于金山词霸的每日一句,我们可以使用以下API获取每日信息
  可以看到界面返回如下信息
  
  我们可以直接使用requests库来调用这个接口
  import requests
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
content = content_e + 'n' + content_c
content_t = res.json()['picture2']
  现在我们封装两个函数来完成功能
  def weibo(content, picture):
ff = requests.get(picture).content
c = Client(app_key, app_secret, 'https://www.luobodazahui.top', username=username, password=password)
c.post('statuses/share', status=content + 'https://www.luobodazahui.com', pic=ff)
def auto_weibo():
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
content = content_e + 'n' + content_c
content_t = res.json()['picture2']
weibo(content, content_t)
return 'OK'
  现在我们可以创建一个定时任务,每天7点运行脚本。
  0 7 * * * python auto_weibo.py
  最终效果如下
  
  免责声明:本文来自汇火官方原创,如转载请注明出处: 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图))
  最近在研究使用Python制作各种类型的机器人。今天给大家分享一个自动发布新浪微博的机器人。
  基本思想
  其实实现一个简单的自动发布微博的微博机器人并不难。你只需要每天准时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。
  材料
  材料方面,我选择了金山词霸的每日一句。我们可以抓取这个网站的相关信息来组成我们的微博素材。
  微博接口
  微博为开发者提供开放平台
  当然,在使用这个平台之前,我们仍然需要注册并创建一个应用程序。比如像我一样,创建一个应用程序
  
  然后我们还需要设置一个安全域名(以后发布微博时会用到),在应用信息-&gt;基本信息中设置。
  
  还需要设置应用回调地址,在应用信息-&gt;高级信息中设置。
  
  当然,对于微博API的调用,我们可以使用别人打包的第三方库,操作起来更方便。这里我使用了一个名为“weibo”的库,直接使用pip安装。
  pip 安装微博
  但是我遇到了一个安装问题,错误如下
  Traceback (most recent call last):
File "setup.py", line 15, in
long_description=open('README.rst').read(),
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 241: illegal multibyte sequence
  好像是编码问题,我们可以通过修改源代码来规避
  
  long_description=open('README.rst', encoding='utf-8').read(),
  python setup.py build
python setup.py install
  至此就可以成功安装微博库了
  准备工作和写作思路就是这些,下面我们来看看具体的过程和代码
  Python自动发布微博
  根据微博库的文档,操作微博还是比较好用的。您只需要在我们创建微博应用时提供App Key和App Secret以及应用回调地址信息即可。简单的调用代码如下
  from weibo import Client
c = Client('App Key', 'App Secret', 'https://www.luobodazahui.top', username='username', password='password')
c.post('statuses/share', status='haha' + 安全域名)
  我们运行代码,如果没有任何反应,我们将可以在该帐户下的微博中看到刚刚发布的微博。
  
  最简单的微博已经发布成功了,那么我们可以发布带图片的微博,我们试试吧
  根据接口status/share的文档,我们可以传入pic参数来上传图片
  
  我们传入 pic 参数并尝试
  f = open('4.png', 'rb')
c.post('statuses/share', status='haha' + 安全域名, pic=f)
f.close()
  是的,它可以正常发布带图片的微博
  
  那么现在微博的自动发布就完成了,下面我们来看看如何自动获取微博素材
  微博素材
  对于金山词霸的每日一句,我们可以使用以下API获取每日信息
  可以看到界面返回如下信息
  
  我们可以直接使用requests库来调用这个接口
  import requests
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
content = content_e + 'n' + content_c
content_t = res.json()['picture2']
  现在我们封装两个函数来完成功能
  def weibo(content, picture):
ff = requests.get(picture).content
c = Client(app_key, app_secret, 'https://www.luobodazahui.top', username=username, password=password)
c.post('statuses/share', status=content + 'https://www.luobodazahui.com', pic=ff)
def auto_weibo():
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
content = content_e + 'n' + content_c
content_t = res.json()['picture2']
weibo(content, content_t)
return 'OK'
  现在我们可以创建一个定时任务,每天7点运行脚本。
  0 7 * * * python auto_weibo.py
  最终效果如下
  
  免责声明:本文来自汇火官方原创,如转载请注明出处:

使用新浪微博开放平台api同步微博内容至自己网站(关于新浪微博爬虫的一些事儿,你知道吗? )

网站优化优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2021-12-21 21:05 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(关于新浪微博爬虫的一些事儿,你知道吗?
)
  最近和孙承杰老师在NLP实验室做了一些事情。我打算结合新浪微博的用户数据,基于文章的“多标签分类”算法,看看实验的效果。于是找了一些关于新浪微博爬虫的资料,整理如下:
  (一)模拟登录新浪微博(Python)(使用python程序获取cookie登录)
  更新:如果只是写个小爬虫,访问需要登录的页面,使用填cookies的方法,简单粗暴有效。有关详细信息,请参阅:
  模拟登录有时需要了解js加密(散列)方法、输入验证方法等,同一段代码很难一直有效。
  文本:
  PC登录新浪微博时,用户名和密码在客户端用js进行了预加密,POST前会GET一组参数,也是POST_DATA的一部分。这样就不能用通常的简单方法来模拟POST登录(如人人网)。
  由于部分要使用的微博数据不方便通过API获取,所以还是要自己写一个小爬虫,模拟登录是必不可少的。想了想这件事,最后还是登录成功了。
  1、在提交POST请求之前,需要GET获取两个参数。
  地址为:(v1.3.18)
  得到的数据中收录了“servertime”和“nonce”的值,是随机的,其他的值好像没什么用。
  2、通过httpfox观察POST数据,参数比较复杂,其中“su”为加密用户名,“sp”为加密密码。“servertime”和“nonce”是从上一步获得的。其他参数不变。
  username 经过了BASE64 计算: username = base64.encodestring( urllib.quote(username) )[:-1];
password 经过了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值来干扰。
即: 两次SHA1加密后, 将结果加上 servertime 和 nonce 的值, 再SHA1 算一次。
将参数组织好, POST请求。 这之后还没有登录成功。
POST后得到的内容中包含一句 location.replace("http://weibo.com/ajaxlogin.php ... 6quot;);
  这是登录失败时的结果。登录成功后的结果类似,只是retcode的值为0,然后再次请求这个网址,这样就可以成功登录微博了。
  记得提前构建缓存。
  以下是完整代码(不做注释,一起来看看):
  #! /usr/bin/env python
#coding=utf8
import urllib
import urllib2
import cookielib
import base64
import re
import json
import hashlib
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
postdata = {
\'entry\': \'weibo\',
\'gateway\': \'1\',
\'from\': \'\',
\'savestate\': \'7\',
\'userticket\': \'1\',
\'ssosimplelogin\': \'1\',
\'vsnf\': \'1\',
\'vsnval\': \'\',
\'su\': \'\',
\'service\': \'miniblog\',
\'servertime\': \'\',
\'nonce\': \'\',
\'pwencode\': \'wsse\',
\'sp\': \'\',
\'encoding\': \'UTF-8\',
\'url\': \'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack\',
\'returntype\': \'META\'
}
def get_servertime():
url = \'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939\'
data = urllib2.urlopen(url).read()
p = re.compile(\'\((.*)\)\')
try:
json_data = p.search(data).group(1)
data = json.loads(json_data)
servertime = str(data[\'servertime\'])
nonce = data[\'nonce\']
return servertime, nonce
except:
print \'Get severtime error!\'
return None
def get_pwd(pwd, servertime, nonce):
pwd1 = hashlib.sha1(pwd).hexdigest()
pwd2 = hashlib.sha1(pwd1).hexdigest()
pwd3_ = pwd2 + servertime + nonce
pwd3 = hashlib.sha1(pwd3_).hexdigest()
return pwd3
def get_user(username):
username_ = urllib.quote(username)
username = base64.encodestring(username_)[:-1]
return username
def login():
username = \'你的登录邮箱\'
pwd = \'你的密码\'
url = \'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)\'
try:
servertime, nonce = get_servertime()
except:
return
global postdata
postdata[\'servertime\'] = servertime
postdata[\'nonce\'] = nonce
postdata[\'su\'] = get_user(username)
postdata[\'sp\'] = get_pwd(pwd, servertime, nonce)
postdata = urllib.urlencode(postdata)
headers = {\'User-Agent\':\'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0\'}
req = urllib2.Request(
url = url,
data = postdata,
headers = headers
)
result = urllib2.urlopen(req)
text = result.read()
p = re.compile(\'location\.replace\(\\'(.*?)\\'\)\')
try:
login_url = p.search(text).group(1)
#print login_url
urllib2.urlopen(login_url)
print "登录成功!"
except:
print \'Login error!\'
login()
  (二)模拟登录新浪微博(直接填写Cookie)
  之前写过一个模拟登录新浪微博,使用POST用户名/密码参数(加密)并保存Cookies来模拟登录。
  一般情况下,为了保证安全,网站会定期更新登录细节,比如修改参数名,更新加密(散列)算法等,所以模拟登录的代码肯定会周期性的失败,但是如果网站 没有进行大的更新,稍微修改一下还是可以使用的。此外,验证码的处理难度更大。虽然该程序在一定程度上可以识别验证码字符,但目前还很难找到一个简单通用的验证码识别程序。
  很多豆友反映,他们需要模拟登录新浪微博来抓取数据。事实上,对于一般的微博数据获取,比如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,并且在网页处理上节省大量精力。对于没有对API开放的数据,我们再采用模拟登录的方式。
  熟悉网络的朋友只要定期维护模拟登录的代码就可以成功登录微博。如果你不是很熟悉,其实可以用更幼稚的方法来解决:直接将Cookie发送到新浪微博,实现模拟登录。
  1. 获取饼干
  这很简单。您可以通过Chrome浏览器的“开发者工具”或火狐浏览器的“HTTPFOX”等插件直接查看您的新浪微博cookies。(注意:不要泄露这个私人Cookie!)
  比如Chrome查看cookie(快捷键F12可以调出chrome开发者工具)
  镀铬饼干
  镀铬饼干
  
  2. 提交Cookie作为访问微博的header参数
  headers = {\'cookie\': \'你的 cookie\'}
  req = urllib2.Request(url, headers=headers) #每次访问页面时,带上headers参数
  r = urllib2.urlopen(req)
  具体代码见:
  (三)多蠢的cookie问题,最后还是自己解决了...
  我不太了解HTTP中的协议和东西,但我知道有这样的东西。是时候阅读《HTTP 权威指南》这本书了,以免...
  同学说可以用cookies登录人人网、微博什么的,他是网络安全高手,黑客类,我这方面菜鸟,所以很想试试。
  网上找了很多资源,包括模拟登录新浪微博(直接填写Cookie)
  我知道在哪里可以找到 cookie,就像这样(我使用 chrome)
  
  点击进去,它看起来像这样
  
  不,这个想法是灵活的。肯定是打开方式不对……所以,打开F12,打开浏览器控制台,查看网络页面,像这样:
  
  赶快去地址输入网址吧!!我们会发现很多东西经过
  
  看到了,是蓝色的东西,复制粘贴,粘贴到代码里,就好了
  
  最后,抓取ajax
  (四)使用python实现新浪微博爬虫
  接下来考虑爬取微博内容的实现。
  这时,我遇到了困难。当我抓取指定网址的微博时,最初只显示了15条。后者是延迟显示(在ajax中称为延迟加载?)。也就是说,当滚动条第一次拖到底部时,会显示第二部分,然后再拖到底部,会显示第三部分。此时,一个页面的微博就完成了。因此,要获取一个微博页面的所有微博,需要访问该页面3次。创建getWeiboPage.py文件,对应代码如下:
  #!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import urllib2
import sys
import time

reload(sys)
sys.setdefaultencoding(\'utf-8\')

class getWeiboPage:
body = {
\'__rnd\':\'\',
\'_k\':\'\',
\'_t\':\'0\',
\'count\':\'50\',
\'end_id\':\'\',
\'max_id\':\'\',
\'page\':1,
\'pagebar\':\'\',
\'pre_page\':\'0\',
\'uid\':\'\'
}
uid_list = []
charset = \'utf8\'

def get_msg(self,uid):
getWeiboPage.body[\'uid\'] = uid
url = self.get_url(uid)
self.get_firstpage(url)
self.get_secondpage(url)
self.get_thirdpage(url)
def get_firstpage(self,url):
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']-1
url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text1\',text)
self.writefile(\'./output/result1\',eval("u\'\'\'"+text+"\'\'\'"))

def get_secondpage(self,url):
getWeiboPage.body[\'count\'] = \'15\'
# getWeiboPage.body[\'end_id\'] = \'3490160379905732\'
# getWeiboPage.body[\'max_id\'] = \'3487344294660278\'
getWeiboPage.body[\'pagebar\'] = \'0\'
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']

url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text2\',text)
self.writefile(\'./output/result2\',eval("u\'\'\'"+text+"\'\'\'"))
def get_thirdpage(self,url):
getWeiboPage.body[\'count\'] = \'15\'
getWeiboPage.body[\'pagebar\'] = \'1\'
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']

url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text3\',text)
self.writefile(\'./output/result3\',eval("u\'\'\'"+text+"\'\'\'"))
def get_url(self,uid):
url = \'http://weibo.com/\' + uid + \'?from=otherprofile&wvr=3.6&loc=tagweibo\'
return url
def get_uid(self,filename):
fread = file(filename)
for line in fread:
getWeiboPage.uid_list.append(line)
print line
time.sleep(1)
def writefile(self,filename,content):
fw = file(filename,\'w\')
fw.write(content)
fw.close() 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(关于新浪微博爬虫的一些事儿,你知道吗?
)
  最近和孙承杰老师在NLP实验室做了一些事情。我打算结合新浪微博的用户数据,基于文章的“多标签分类”算法,看看实验的效果。于是找了一些关于新浪微博爬虫的资料,整理如下:
  (一)模拟登录新浪微博(Python)(使用python程序获取cookie登录)
  更新:如果只是写个小爬虫,访问需要登录的页面,使用填cookies的方法,简单粗暴有效。有关详细信息,请参阅:
  模拟登录有时需要了解js加密(散列)方法、输入验证方法等,同一段代码很难一直有效。
  文本:
  PC登录新浪微博时,用户名和密码在客户端用js进行了预加密,POST前会GET一组参数,也是POST_DATA的一部分。这样就不能用通常的简单方法来模拟POST登录(如人人网)。
  由于部分要使用的微博数据不方便通过API获取,所以还是要自己写一个小爬虫,模拟登录是必不可少的。想了想这件事,最后还是登录成功了。
  1、在提交POST请求之前,需要GET获取两个参数。
  地址为:(v1.3.18)
  得到的数据中收录了“servertime”和“nonce”的值,是随机的,其他的值好像没什么用。
  2、通过httpfox观察POST数据,参数比较复杂,其中“su”为加密用户名,“sp”为加密密码。“servertime”和“nonce”是从上一步获得的。其他参数不变。
  username 经过了BASE64 计算: username = base64.encodestring( urllib.quote(username) )[:-1];
password 经过了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值来干扰。
即: 两次SHA1加密后, 将结果加上 servertime 和 nonce 的值, 再SHA1 算一次。
将参数组织好, POST请求。 这之后还没有登录成功。
POST后得到的内容中包含一句 location.replace("http://weibo.com/ajaxlogin.php ... 6quot;);
  这是登录失败时的结果。登录成功后的结果类似,只是retcode的值为0,然后再次请求这个网址,这样就可以成功登录微博了。
  记得提前构建缓存。
  以下是完整代码(不做注释,一起来看看):
  #! /usr/bin/env python
#coding=utf8
import urllib
import urllib2
import cookielib
import base64
import re
import json
import hashlib
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
postdata = {
\'entry\': \'weibo\',
\'gateway\': \'1\',
\'from\': \'\',
\'savestate\': \'7\',
\'userticket\': \'1\',
\'ssosimplelogin\': \'1\',
\'vsnf\': \'1\',
\'vsnval\': \'\',
\'su\': \'\',
\'service\': \'miniblog\',
\'servertime\': \'\',
\'nonce\': \'\',
\'pwencode\': \'wsse\',
\'sp\': \'\',
\'encoding\': \'UTF-8\',
\'url\': \'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack\',
\'returntype\': \'META\'
}
def get_servertime():
url = \'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939\'
data = urllib2.urlopen(url).read()
p = re.compile(\'\((.*)\)\')
try:
json_data = p.search(data).group(1)
data = json.loads(json_data)
servertime = str(data[\'servertime\'])
nonce = data[\'nonce\']
return servertime, nonce
except:
print \'Get severtime error!\'
return None
def get_pwd(pwd, servertime, nonce):
pwd1 = hashlib.sha1(pwd).hexdigest()
pwd2 = hashlib.sha1(pwd1).hexdigest()
pwd3_ = pwd2 + servertime + nonce
pwd3 = hashlib.sha1(pwd3_).hexdigest()
return pwd3
def get_user(username):
username_ = urllib.quote(username)
username = base64.encodestring(username_)[:-1]
return username
def login():
username = \'你的登录邮箱\'
pwd = \'你的密码\'
url = \'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)\'
try:
servertime, nonce = get_servertime()
except:
return
global postdata
postdata[\'servertime\'] = servertime
postdata[\'nonce\'] = nonce
postdata[\'su\'] = get_user(username)
postdata[\'sp\'] = get_pwd(pwd, servertime, nonce)
postdata = urllib.urlencode(postdata)
headers = {\'User-Agent\':\'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0\'}
req = urllib2.Request(
url = url,
data = postdata,
headers = headers
)
result = urllib2.urlopen(req)
text = result.read()
p = re.compile(\'location\.replace\(\\'(.*?)\\'\)\')
try:
login_url = p.search(text).group(1)
#print login_url
urllib2.urlopen(login_url)
print "登录成功!"
except:
print \'Login error!\'
login()
  (二)模拟登录新浪微博(直接填写Cookie)
  之前写过一个模拟登录新浪微博,使用POST用户名/密码参数(加密)并保存Cookies来模拟登录。
  一般情况下,为了保证安全,网站会定期更新登录细节,比如修改参数名,更新加密(散列)算法等,所以模拟登录的代码肯定会周期性的失败,但是如果网站 没有进行大的更新,稍微修改一下还是可以使用的。此外,验证码的处理难度更大。虽然该程序在一定程度上可以识别验证码字符,但目前还很难找到一个简单通用的验证码识别程序。
  很多豆友反映,他们需要模拟登录新浪微博来抓取数据。事实上,对于一般的微博数据获取,比如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,并且在网页处理上节省大量精力。对于没有对API开放的数据,我们再采用模拟登录的方式。
  熟悉网络的朋友只要定期维护模拟登录的代码就可以成功登录微博。如果你不是很熟悉,其实可以用更幼稚的方法来解决:直接将Cookie发送到新浪微博,实现模拟登录。
  1. 获取饼干
  这很简单。您可以通过Chrome浏览器的“开发者工具”或火狐浏览器的“HTTPFOX”等插件直接查看您的新浪微博cookies。(注意:不要泄露这个私人Cookie!)
  比如Chrome查看cookie(快捷键F12可以调出chrome开发者工具)
  镀铬饼干
  镀铬饼干
  
  2. 提交Cookie作为访问微博的header参数
  headers = {\'cookie\': \'你的 cookie\'}
  req = urllib2.Request(url, headers=headers) #每次访问页面时,带上headers参数
  r = urllib2.urlopen(req)
  具体代码见:
  (三)多蠢的cookie问题,最后还是自己解决了...
  我不太了解HTTP中的协议和东西,但我知道有这样的东西。是时候阅读《HTTP 权威指南》这本书了,以免...
  同学说可以用cookies登录人人网、微博什么的,他是网络安全高手,黑客类,我这方面菜鸟,所以很想试试。
  网上找了很多资源,包括模拟登录新浪微博(直接填写Cookie)
  我知道在哪里可以找到 cookie,就像这样(我使用 chrome)
  
  点击进去,它看起来像这样
  
  不,这个想法是灵活的。肯定是打开方式不对……所以,打开F12,打开浏览器控制台,查看网络页面,像这样:
  
  赶快去地址输入网址吧!!我们会发现很多东西经过
  
  看到了,是蓝色的东西,复制粘贴,粘贴到代码里,就好了
  
  最后,抓取ajax
  (四)使用python实现新浪微博爬虫
  接下来考虑爬取微博内容的实现。
  这时,我遇到了困难。当我抓取指定网址的微博时,最初只显示了15条。后者是延迟显示(在ajax中称为延迟加载?)。也就是说,当滚动条第一次拖到底部时,会显示第二部分,然后再拖到底部,会显示第三部分。此时,一个页面的微博就完成了。因此,要获取一个微博页面的所有微博,需要访问该页面3次。创建getWeiboPage.py文件,对应代码如下:
  #!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import urllib2
import sys
import time

reload(sys)
sys.setdefaultencoding(\'utf-8\')

class getWeiboPage:
body = {
\'__rnd\':\'\',
\'_k\':\'\',
\'_t\':\'0\',
\'count\':\'50\',
\'end_id\':\'\',
\'max_id\':\'\',
\'page\':1,
\'pagebar\':\'\',
\'pre_page\':\'0\',
\'uid\':\'\'
}
uid_list = []
charset = \'utf8\'

def get_msg(self,uid):
getWeiboPage.body[\'uid\'] = uid
url = self.get_url(uid)
self.get_firstpage(url)
self.get_secondpage(url)
self.get_thirdpage(url)
def get_firstpage(self,url):
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']-1
url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text1\',text)
self.writefile(\'./output/result1\',eval("u\'\'\'"+text+"\'\'\'"))

def get_secondpage(self,url):
getWeiboPage.body[\'count\'] = \'15\'
# getWeiboPage.body[\'end_id\'] = \'3490160379905732\'
# getWeiboPage.body[\'max_id\'] = \'3487344294660278\'
getWeiboPage.body[\'pagebar\'] = \'0\'
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']

url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text2\',text)
self.writefile(\'./output/result2\',eval("u\'\'\'"+text+"\'\'\'"))
def get_thirdpage(self,url):
getWeiboPage.body[\'count\'] = \'15\'
getWeiboPage.body[\'pagebar\'] = \'1\'
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']

url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text3\',text)
self.writefile(\'./output/result3\',eval("u\'\'\'"+text+"\'\'\'"))
def get_url(self,uid):
url = \'http://weibo.com/\' + uid + \'?from=otherprofile&wvr=3.6&loc=tagweibo\'
return url
def get_uid(self,filename):
fread = file(filename)
for line in fread:
getWeiboPage.uid_list.append(line)
print line
time.sleep(1)
def writefile(self,filename,content):
fw = file(filename,\'w\')
fw.write(content)
fw.close()

使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站或服务器端)

网站优化优采云 发表了文章 • 0 个评论 • 58 次浏览 • 2021-12-21 12:02 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站或服务器端)
  使用新浪微博开放平台api同步微博内容至自己网站或服务器端,然后对网站或服务器进行二次开发(seo,权重提升,转发等)。如果网站或服务器使用了新浪微博商业服务(如,用来直接发广告),那么可以做个jsonxml接口进行实时推送。
  直接上阿里云购买微博服务器。卖家会给你一个配置文件。例如这个-ternews.xml进去修改你的域名和服务器配置。
  twitter有个跨站http请求转发,mailtosmtp,
  voip转发这是已经被证明的事情。但是微博为了支持twitter服务,要求用户需要登录才能转发,这无疑增加了这部分功能的流失量。
  你试试电脑和手机同时登录新浪微博,如果登录就会默认跳转到新浪的官方网站(我觉得这是新浪微博使用的策略),
  微博服务器不是客户端地址,我都是mailtosmtp。
  先设置好你需要在微博官网有所要上的网站,然后根据网站,统一订阅(及上传发送状态)或者自行经营,在有心人点击发送前,发一条讯息直接发送到要转发的地址。
  开api.转发到/。
  这个似乎可以吧?不过要看你是个人或者网站还是企业的,如果是个人的需要在同一页面放你的网站或者企业网站, 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站或服务器端)
  使用新浪微博开放平台api同步微博内容至自己网站或服务器端,然后对网站或服务器进行二次开发(seo,权重提升,转发等)。如果网站或服务器使用了新浪微博商业服务(如,用来直接发广告),那么可以做个jsonxml接口进行实时推送。
  直接上阿里云购买微博服务器。卖家会给你一个配置文件。例如这个-ternews.xml进去修改你的域名和服务器配置。
  twitter有个跨站http请求转发,mailtosmtp,
  voip转发这是已经被证明的事情。但是微博为了支持twitter服务,要求用户需要登录才能转发,这无疑增加了这部分功能的流失量。
  你试试电脑和手机同时登录新浪微博,如果登录就会默认跳转到新浪的官方网站(我觉得这是新浪微博使用的策略),
  微博服务器不是客户端地址,我都是mailtosmtp。
  先设置好你需要在微博官网有所要上的网站,然后根据网站,统一订阅(及上传发送状态)或者自行经营,在有心人点击发送前,发一条讯息直接发送到要转发的地址。
  开api.转发到/。
  这个似乎可以吧?不过要看你是个人或者网站还是企业的,如果是个人的需要在同一页面放你的网站或者企业网站,

使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台做个实践,开发一个功能简单的android客户端)

网站优化优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-12-21 02:11 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台做个实践,开发一个功能简单的android客户端)
  介绍
  最近不太忙,花了点时间学习Android应用开发。经过两周的学习,我在学习的同时也写了很多demo例子。您可以播放来自基本控件和基本动画效果的大量演示,并继续更新和下载。
  从本周开始,我打算以新浪微博开放平台为实践,开发一个简单的Android客户端,尽可能完善功能。
  今天的内容
  
  上图是这个客户端的主界面。目前只拿到了前20条数据。您也可以单击刷新来刷新数据。功能比较简单。
  运行系统为android2.2.
  用到的技术点包括ListView、自定义ListAdapter、多线程相关的Message、Handler、认证相关的OAuth、用户图片的异步加载。
  新浪微博的验证使用了signpost的OAuth组件,没有使用微博的SDK。
  
  来源下载:新浪微博2
  下载源代码后,将后缀改为rar,使用压缩软件解压即可。
  关于 OAuth 身份验证
  OAuth 是一种流行的授权方案。twitter、facebook、google等大型开放平台均支持oauth认证方式。新浪微博、腾讯微博、163微博等国内开放平台也已支持。这种验证方式。
  引用维基百科的相关说明
  “Oauth 是一种开放标准,允许用户允许第三方应用访问用户在某个网站上的私有资源,而无需将用户名和密码传递给第三方应用。oauth 允许用户提供一个令牌,而不是用户名和密码来访问它们存储在特定服务提供商中的数据。”
  例如:
  用户A在服务提供者B上存储了一些资源,B支持oauth授权方式。A 是 B 上的注册用户,拥有用户名和密码。您可以通过使用用户名和密码登录 B 来查看您的资源。假设有一个应用C,用户A在使用C时需要将资源存储在B上,实现C在B上展示资源有两种方式。
  这时候C可以使用B开启的oauth授权机制,当用户A想要展示B上的资源时,C会跳转到B的认证页面,用户在B的页面输入用户名和密码。通过后,会询问用户是否为C应用开发相关资源。用户可以自定义C可以访问的资源,然后跳转回C应用。这样就不用担心用户名和密码,也不会因为同时存储多个资源而导致维护问题。
  你可以通过下面的网站了解更多关于oauth的具体技术细节。
  
  从上图我们可以看出,实际的流程分为消费者和提供者两部分。Consumer是例子中的c应用,provider是例子中的B服务提供者。
  使用OAuth进行认证授权的过程如下:
  用户访问客户端的网站,想要操作服务提供者中存储的用户资源。客户端向服务提供者请求一个临时令牌。在服务提供者验证客户端的身份后,它会授予一个临时令牌。客户端获取临时令牌后,将用户引导至服务提供商的授权页面,请求用户授权。在这个过程中,临时令牌和客户端的回调连接被发送给服务提供者。用户在服务提供者的网页上输入用户名和密码,然后授权客户端访问所请求的资源。授权成功后,服务提供者将用户引导回客户端的网页。客户端根据临时令牌从服务提供者处获取访问令牌。服务提供者根据临时令牌和用户的授权向客户端授予访问令牌。客户端使用获取的访问令牌访问存储在服务提供者上的受保护资源。新浪微博上的Oauth
  
  借用新浪微博上的oauth验证流程图。
  当我们在新浪微博开放平台上创建一个新的应用程序时,我们会给新的应用程序分配一个key和secret,即consumerKey和consumerSecret。通过这两件事,我们去到request_token,然后将用户重定向到新浪微博平台的授权页面。授权后,我们将根据 callback_url 重定向到我们应用程序的地址。我们再次使用request_token获取access_token,后面需要传递。访问令牌访问开放平台提供的需要验证的接口。
  当然,那些不需要验证就可以访问的接口,直接使用key就可以访问了。具体请参考开放平台提供的API文档。
  腾讯微博和163微博的开放平台在原理和实现上是相似的。
  包com. 新浪微博2;导入 oauth。路标。OAuth消费者;导入 oauth。路标。OAuthProvider;导入 oauth。路标。公地http。CommonsHttpOAuthConsumer; 导入 oauth。路标。公地http。CommonsHttpOAuthProvider; 导入 oauth。路标。例外。OAuth通信异常;导入 oauth。路标。例外。OAuthExpectationFailedException; 导入 oauth。路标。例外。OAuthMessageSignerException; 导入 oauth。路标。例外。OAuthNotAuthorizedException; 公共类 OAuth {私有 OAuthConsumer mConsumer; 私有 OAuthProvider mProvider;public static final String CALLBACK_URL = "sinaweibo2://WeiboListActivity"; 公共静态最终字符串CONSUMER_KEY =“1849239616”;公共静态最终字符串 CONSUMER_SECRET = "b2137bf782d5a8394"
  吨。新浪。com。cn/oauth/request_token"; public static final String ACCESS_TOKEN_URL = ". 吨。新浪。com。cn/oauth/access_token"; public static final String AUTHORIZE_URL = ". 吨。新浪。com。cn/oauth/authorize"; public OAuth() {} public String RetrieveAuthUrl() 抛出 OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mConsumer = new CommonsHttpOAuthConsumer(CONSUTOMER_KEY, CONSUMER_SECRET_URL, SUMERZEUMERESUERESUERUrl 提供者字符串); = mProvider。
  检索请求令牌(mConsumer,CALLBACK_URL);return authUrl;} public void RetrieveAccessToken(String verifier) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mProvider. setOAuth10a(true); 供应商。检索访问令牌(mConsumer,验证器);OAuth 用户。USER_ID=mProvider。获取响应参数()。getFirst("user_id"); OAuth 用户。ACCESS_TOKEN = mConsumer。获取令牌();OAuth 用户。ACCESS_TOKEN_SECRET = mConsumer。getTokenSecret();}}
  更多功能
  接下来主要有两个功能需要改进,一个是分页浏览,一个是发布微博。
  未来可能会支持图片发布等实用功能。
  有UI美化和性能优化。
  总结
  学习过程中看了两本书,Pro.Android.2.pdf和Professional.Android.2.Application.Development.(Wrox,.2010,.0470565527).pdf,都是很不错的入门书籍,我没有全部看完,看了大部分之后,会一边看一边写demo。
  同时,我每天都会在论坛,eoe的开发者门户。回答问题、解决问题、提问、发帖,简而言之就是锻炼自己,强迫自己锻炼基础和思维。
  论坛上有很多中文pdf教程,但大部分都是从android开发者中心的Dev Guide和Resources中的内容翻译过来的。所以我觉得如果英文不是很差的话,建议直接阅读上面两节,同时练习其中的例子,保证两周内有很大的进步。
  参考
  Technorati 标签:android、开放平台、oauth、新浪微博 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台做个实践,开发一个功能简单的android客户端)
  介绍
  最近不太忙,花了点时间学习Android应用开发。经过两周的学习,我在学习的同时也写了很多demo例子。您可以播放来自基本控件和基本动画效果的大量演示,并继续更新和下载。
  从本周开始,我打算以新浪微博开放平台为实践,开发一个简单的Android客户端,尽可能完善功能。
  今天的内容
  
  上图是这个客户端的主界面。目前只拿到了前20条数据。您也可以单击刷新来刷新数据。功能比较简单。
  运行系统为android2.2.
  用到的技术点包括ListView、自定义ListAdapter、多线程相关的Message、Handler、认证相关的OAuth、用户图片的异步加载。
  新浪微博的验证使用了signpost的OAuth组件,没有使用微博的SDK。
  
  来源下载:新浪微博2
  下载源代码后,将后缀改为rar,使用压缩软件解压即可。
  关于 OAuth 身份验证
  OAuth 是一种流行的授权方案。twitter、facebook、google等大型开放平台均支持oauth认证方式。新浪微博、腾讯微博、163微博等国内开放平台也已支持。这种验证方式。
  引用维基百科的相关说明
  “Oauth 是一种开放标准,允许用户允许第三方应用访问用户在某个网站上的私有资源,而无需将用户名和密码传递给第三方应用。oauth 允许用户提供一个令牌,而不是用户名和密码来访问它们存储在特定服务提供商中的数据。”
  例如:
  用户A在服务提供者B上存储了一些资源,B支持oauth授权方式。A 是 B 上的注册用户,拥有用户名和密码。您可以通过使用用户名和密码登录 B 来查看您的资源。假设有一个应用C,用户A在使用C时需要将资源存储在B上,实现C在B上展示资源有两种方式。
  这时候C可以使用B开启的oauth授权机制,当用户A想要展示B上的资源时,C会跳转到B的认证页面,用户在B的页面输入用户名和密码。通过后,会询问用户是否为C应用开发相关资源。用户可以自定义C可以访问的资源,然后跳转回C应用。这样就不用担心用户名和密码,也不会因为同时存储多个资源而导致维护问题。
  你可以通过下面的网站了解更多关于oauth的具体技术细节。
  
  从上图我们可以看出,实际的流程分为消费者和提供者两部分。Consumer是例子中的c应用,provider是例子中的B服务提供者。
  使用OAuth进行认证授权的过程如下:
  用户访问客户端的网站,想要操作服务提供者中存储的用户资源。客户端向服务提供者请求一个临时令牌。在服务提供者验证客户端的身份后,它会授予一个临时令牌。客户端获取临时令牌后,将用户引导至服务提供商的授权页面,请求用户授权。在这个过程中,临时令牌和客户端的回调连接被发送给服务提供者。用户在服务提供者的网页上输入用户名和密码,然后授权客户端访问所请求的资源。授权成功后,服务提供者将用户引导回客户端的网页。客户端根据临时令牌从服务提供者处获取访问令牌。服务提供者根据临时令牌和用户的授权向客户端授予访问令牌。客户端使用获取的访问令牌访问存储在服务提供者上的受保护资源。新浪微博上的Oauth
  
  借用新浪微博上的oauth验证流程图。
  当我们在新浪微博开放平台上创建一个新的应用程序时,我们会给新的应用程序分配一个key和secret,即consumerKey和consumerSecret。通过这两件事,我们去到request_token,然后将用户重定向到新浪微博平台的授权页面。授权后,我们将根据 callback_url 重定向到我们应用程序的地址。我们再次使用request_token获取access_token,后面需要传递。访问令牌访问开放平台提供的需要验证的接口。
  当然,那些不需要验证就可以访问的接口,直接使用key就可以访问了。具体请参考开放平台提供的API文档。
  腾讯微博和163微博的开放平台在原理和实现上是相似的。
  包com. 新浪微博2;导入 oauth。路标。OAuth消费者;导入 oauth。路标。OAuthProvider;导入 oauth。路标。公地http。CommonsHttpOAuthConsumer; 导入 oauth。路标。公地http。CommonsHttpOAuthProvider; 导入 oauth。路标。例外。OAuth通信异常;导入 oauth。路标。例外。OAuthExpectationFailedException; 导入 oauth。路标。例外。OAuthMessageSignerException; 导入 oauth。路标。例外。OAuthNotAuthorizedException; 公共类 OAuth {私有 OAuthConsumer mConsumer; 私有 OAuthProvider mProvider;public static final String CALLBACK_URL = "sinaweibo2://WeiboListActivity"; 公共静态最终字符串CONSUMER_KEY =“1849239616”;公共静态最终字符串 CONSUMER_SECRET = "b2137bf782d5a8394"
  吨。新浪。com。cn/oauth/request_token"; public static final String ACCESS_TOKEN_URL = ". 吨。新浪。com。cn/oauth/access_token"; public static final String AUTHORIZE_URL = ". 吨。新浪。com。cn/oauth/authorize"; public OAuth() {} public String RetrieveAuthUrl() 抛出 OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mConsumer = new CommonsHttpOAuthConsumer(CONSUTOMER_KEY, CONSUMER_SECRET_URL, SUMERZEUMERESUERESUERUrl 提供者字符串); = mProvider。
  检索请求令牌(mConsumer,CALLBACK_URL);return authUrl;} public void RetrieveAccessToken(String verifier) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mProvider. setOAuth10a(true); 供应商。检索访问令牌(mConsumer,验证器);OAuth 用户。USER_ID=mProvider。获取响应参数()。getFirst("user_id"); OAuth 用户。ACCESS_TOKEN = mConsumer。获取令牌();OAuth 用户。ACCESS_TOKEN_SECRET = mConsumer。getTokenSecret();}}
  更多功能
  接下来主要有两个功能需要改进,一个是分页浏览,一个是发布微博。
  未来可能会支持图片发布等实用功能。
  有UI美化和性能优化。
  总结
  学习过程中看了两本书,Pro.Android.2.pdf和Professional.Android.2.Application.Development.(Wrox,.2010,.0470565527).pdf,都是很不错的入门书籍,我没有全部看完,看了大部分之后,会一边看一边写demo。
  同时,我每天都会在论坛,eoe的开发者门户。回答问题、解决问题、提问、发帖,简而言之就是锻炼自己,强迫自己锻炼基础和思维。
  论坛上有很多中文pdf教程,但大部分都是从android开发者中心的Dev Guide和Resources中的内容翻译过来的。所以我觉得如果英文不是很差的话,建议直接阅读上面两节,同时练习其中的例子,保证两周内有很大的进步。
  参考
  Technorati 标签:android、开放平台、oauth、新浪微博

使用新浪微博开放平台api同步微博内容至自己网站(新浪微博的API研究研究,实现了类拷过来)

网站优化优采云 发表了文章 • 0 个评论 • 42 次浏览 • 2021-12-20 11:12 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博的API研究研究,实现了类拷过来)
  今天发布了一个关于新浪微博API的研究,现在已经实现了发布微博的功能,包括带图片的微博。为安全起见,新浪微博API不提供微博账号密码登录功能。相反,它使用 OAuth 授权。用户通过浏览器访问新浪网站进行登录,登录成功后,浏览器将key和secret返回给程序。
  main.xml:
  一个登录按钮、一个输入框和一个发布按钮
  因为是接收浏览器返回的数据,所以AndroidManifest.xml在注册Activity时必须添加一个Intent-Filter。
  intent-filter 必须写成两段。如果写在一起,就不会被激活。
  简单起见,直接复制新浪示例中的OAuthConstant类:
  接下来是最关键的主程序:
  
package com.pocketdigi.weibo;

import java.io.File;

import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Main extends Activity {
/** Called when the activity is first created. */
String key = "", secret = "";
Button login,send;
EditText status;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.setProperty("weibo4j.oauth.consumerKey", "3997936609");
System.setProperty("weibo4j.oauth.consumerSecret",
"8bc9e3bfd6ae8e3b2b8bda9079918950");
//设置在新浪应用开放平台申请的应用的key和secret
login=(Button)findViewById(R.id.login);
send=(Button)findViewById(R.id.send);
status=(EditText)findViewById(R.id.status);
login.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
login();
//登录
}});
send.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String text=String.valueOf(status.getText());
Weibo weibo = new Weibo();
weibo.setToken(key,secret);
try {
//weibo.updateStatus(text);
//只发文字
File f=new File("/sdcard/wallpaper/129567208597069400.jpg");
weibo.uploadStatus(text,f );
//发文字+图片,这里需要导入commons-httpclient-3.0.1.jar,自己网上下
//在实际项目上,最好放Thread里,因为按下去的时候按钮会卡
} catch (WeiboException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
//启动时执行检测是否来自网页登录返回
//如果是,获取key和secret
//否则读取SharedPreferences
//若得不到key和secret,直接跳转登录
Uri uri = this.getIntent().getData();
if (uri != null) {
//如果是浏览器返回
try {
RequestToken requestToken = OAuthConstant.getInstance()
.getRequestToken();
AccessToken accessToken = requestToken.getAccessToken(uri
.getQueryParameter("oauth_verifier"));
OAuthConstant.getInstance().setAccessToken(accessToken);
// 保存
Editor sharedata = getSharedPreferences("WeiBo", 0).edit();
sharedata.putString("key", accessToken.getToken());
sharedata.putString("secret", accessToken.getTokenSecret());
sharedata.commit();
key = accessToken.getToken();
secret = accessToken.getTokenSecret();
} catch (WeiboException e) {
e.printStackTrace();
}
} else {
//如果是用户自己启动
SharedPreferences settings = getSharedPreferences("WeiBo", 0);
key = settings.getString("key", "");
secret = settings.getString("secret", "");
}
if (key.equals("") || secret.equals("")) {
Toast.makeText(this, "尚未登录", Toast.LENGTH_LONG).show();
login();
//跳转到浏览器登录

}

}
public void login(){
Weibo weibo = OAuthConstant.getInstance().getWeibo();
RequestToken requestToken;
try {
requestToken =weibo.getOAuthRequestToken("sina://weibo");
//为了避免与同类应用冲突,还是自己改下URI吧
Uri uri2 = Uri.parse(requestToken.getAuthenticationURL()+ "&from=xweibo");
OAuthConstant.getInstance().setRequestToken(requestToken);
startActivity(new Intent(Intent.ACTION_VIEW, uri2));
} catch (WeiboException e) {
e.printStackTrace();
}
}
}
  发送图片需要导入commons-httpclient-3.0.1.jar,否则启动会报错,当然是weibo4android-1. 2.0. jar 必不可少 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博的API研究研究,实现了类拷过来)
  今天发布了一个关于新浪微博API的研究,现在已经实现了发布微博的功能,包括带图片的微博。为安全起见,新浪微博API不提供微博账号密码登录功能。相反,它使用 OAuth 授权。用户通过浏览器访问新浪网站进行登录,登录成功后,浏览器将key和secret返回给程序。
  main.xml:
  一个登录按钮、一个输入框和一个发布按钮
  因为是接收浏览器返回的数据,所以AndroidManifest.xml在注册Activity时必须添加一个Intent-Filter。
  intent-filter 必须写成两段。如果写在一起,就不会被激活。
  简单起见,直接复制新浪示例中的OAuthConstant类:
  接下来是最关键的主程序:
  
package com.pocketdigi.weibo;

import java.io.File;

import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Main extends Activity {
/** Called when the activity is first created. */
String key = "", secret = "";
Button login,send;
EditText status;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.setProperty("weibo4j.oauth.consumerKey", "3997936609");
System.setProperty("weibo4j.oauth.consumerSecret",
"8bc9e3bfd6ae8e3b2b8bda9079918950");
//设置在新浪应用开放平台申请的应用的key和secret
login=(Button)findViewById(R.id.login);
send=(Button)findViewById(R.id.send);
status=(EditText)findViewById(R.id.status);
login.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
login();
//登录
}});
send.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String text=String.valueOf(status.getText());
Weibo weibo = new Weibo();
weibo.setToken(key,secret);
try {
//weibo.updateStatus(text);
//只发文字
File f=new File("/sdcard/wallpaper/129567208597069400.jpg");
weibo.uploadStatus(text,f );
//发文字+图片,这里需要导入commons-httpclient-3.0.1.jar,自己网上下
//在实际项目上,最好放Thread里,因为按下去的时候按钮会卡
} catch (WeiboException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
//启动时执行检测是否来自网页登录返回
//如果是,获取key和secret
//否则读取SharedPreferences
//若得不到key和secret,直接跳转登录
Uri uri = this.getIntent().getData();
if (uri != null) {
//如果是浏览器返回
try {
RequestToken requestToken = OAuthConstant.getInstance()
.getRequestToken();
AccessToken accessToken = requestToken.getAccessToken(uri
.getQueryParameter("oauth_verifier"));
OAuthConstant.getInstance().setAccessToken(accessToken);
// 保存
Editor sharedata = getSharedPreferences("WeiBo", 0).edit();
sharedata.putString("key", accessToken.getToken());
sharedata.putString("secret", accessToken.getTokenSecret());
sharedata.commit();
key = accessToken.getToken();
secret = accessToken.getTokenSecret();
} catch (WeiboException e) {
e.printStackTrace();
}
} else {
//如果是用户自己启动
SharedPreferences settings = getSharedPreferences("WeiBo", 0);
key = settings.getString("key", "");
secret = settings.getString("secret", "");
}
if (key.equals("") || secret.equals("")) {
Toast.makeText(this, "尚未登录", Toast.LENGTH_LONG).show();
login();
//跳转到浏览器登录

}

}
public void login(){
Weibo weibo = OAuthConstant.getInstance().getWeibo();
RequestToken requestToken;
try {
requestToken =weibo.getOAuthRequestToken("sina://weibo");
//为了避免与同类应用冲突,还是自己改下URI吧
Uri uri2 = Uri.parse(requestToken.getAuthenticationURL()+ "&from=xweibo");
OAuthConstant.getInstance().setRequestToken(requestToken);
startActivity(new Intent(Intent.ACTION_VIEW, uri2));
} catch (WeiboException e) {
e.printStackTrace();
}
}
}
  发送图片需要导入commons-httpclient-3.0.1.jar,否则启动会报错,当然是weibo4android-1. 2.0. jar 必不可少

使用新浪微博开放平台api同步微博内容至自己网站(利用PHP进行新浪微博API开发的内容一个整理和说明)

网站优化优采云 发表了文章 • 0 个评论 • 34 次浏览 • 2021-12-20 11:12 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(利用PHP进行新浪微博API开发的内容一个整理和说明)
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。整理和说明内容
  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站是: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,
  新浪微博API开发前的准备
  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:
  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。
  新浪微博API开发最重要的用户授权流程
  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。新浪微博开放平台的OAuth授权流程非常清晰完整。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。
  1.首先获取未授权的Request Token
  复制代码代码如下:
  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );
  $keys = $o-&gt;getRequestToken();
  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);
  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。
  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。
  2. 然后请求用户授权token
  复制代码代码如下:
  $_SESSION['keys'] = $keys;
  aurl = $o-&gt;getAuthorizeURL( $keys['oauth_token'] ,false,'');
  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。拿到$aurl后,我们可以使用header()直接跳转到那个授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会自动再次跳转回来。
  需要注意的是,需要设置session key的值,在下面获取的授权Access Token中需要。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面无法获取Access Token的值。必须记住这一点。
  3.用户最后授权的Access Token
  复制代码代码如下:
  $o = 新微博OAuth( WB_AKEY,
  WB_SKEY,
  $_SESSION['keys']['oauth_token'],
  $_SESSION['keys']['oauth_token_secret'] );
  $last_key = $o-&gt;getAccessToken( $_REQUEST['oauth_verifier']);
  回声($last_key['oauth_token']);
  以上代码最终获得了用户授权的Access Token。一共有两个值,存放在$last_key数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。
  授权后工作
  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。
  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:
  复制代码代码如下:
  //获取前20条最新更新的公众微博新闻
  $c = 新微博客户端( WB_AKEY,
  WB_SKEY,
  $oauth_token,
  $oauth_token_secret );
  $msg = $c-&gt;public_timeline();
  if ($msg === false || $msg === null){
  echo "发生错误";
  返回假;
  }
  if (isset($msg['error_code']) &amp;&amp; isset($msg['error'])){
  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error']);
  返回假;
  }
  打印_r($msg);
  通常我们拿到用户授权的access token值后,会保存在我们的user表中,对应我们应用中的账号。之后我们就不用每次调用新浪微博的API接口都去。认证。
  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有错误。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,那么使用Json格式数据有先天优势,如果返回Json格式数据,直接使用php即可。函数 json_decode() 可以转换为 PHP 常用的数组格式。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(利用PHP进行新浪微博API开发的内容一个整理和说明)
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。整理和说明内容
  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站是: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,
  新浪微博API开发前的准备
  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:
  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。
  新浪微博API开发最重要的用户授权流程
  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。新浪微博开放平台的OAuth授权流程非常清晰完整。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。
  1.首先获取未授权的Request Token
  复制代码代码如下:
  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );
  $keys = $o-&gt;getRequestToken();
  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);
  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。
  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。
  2. 然后请求用户授权token
  复制代码代码如下:
  $_SESSION['keys'] = $keys;
  aurl = $o-&gt;getAuthorizeURL( $keys['oauth_token'] ,false,'');
  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。拿到$aurl后,我们可以使用header()直接跳转到那个授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会自动再次跳转回来。
  需要注意的是,需要设置session key的值,在下面获取的授权Access Token中需要。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面无法获取Access Token的值。必须记住这一点。
  3.用户最后授权的Access Token
  复制代码代码如下:
  $o = 新微博OAuth( WB_AKEY,
  WB_SKEY,
  $_SESSION['keys']['oauth_token'],
  $_SESSION['keys']['oauth_token_secret'] );
  $last_key = $o-&gt;getAccessToken( $_REQUEST['oauth_verifier']);
  回声($last_key['oauth_token']);
  以上代码最终获得了用户授权的Access Token。一共有两个值,存放在$last_key数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。
  授权后工作
  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。
  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:
  复制代码代码如下:
  //获取前20条最新更新的公众微博新闻
  $c = 新微博客户端( WB_AKEY,
  WB_SKEY,
  $oauth_token,
  $oauth_token_secret );
  $msg = $c-&gt;public_timeline();
  if ($msg === false || $msg === null){
  echo "发生错误";
  返回假;
  }
  if (isset($msg['error_code']) &amp;&amp; isset($msg['error'])){
  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error']);
  返回假;
  }
  打印_r($msg);
  通常我们拿到用户授权的access token值后,会保存在我们的user表中,对应我们应用中的账号。之后我们就不用每次调用新浪微博的API接口都去。认证。
  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有错误。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,那么使用Json格式数据有先天优势,如果返回Json格式数据,直接使用php即可。函数 json_decode() 可以转换为 PHP 常用的数组格式。

使用新浪微博开放平台api同步微博内容至自己网站( 利用PHP进行新浪微博API开发的内容进行一个整理和说明)

网站优化优采云 发表了文章 • 0 个评论 • 38 次浏览 • 2021-12-20 02:13 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(
利用PHP进行新浪微博API开发的内容进行一个整理和说明)
  新浪微博API开发用户授权介绍(PHP基础)
  更新时间:2011-09-25 22:52:37 作者:
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。整理和说明内容
  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站是: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,
  新浪微博API开发前的准备
  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:
  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。
  新浪微博API开发最重要的用户授权流程
  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。新浪微博开放平台的OAuth授权流程非常清晰完整。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。
  1.首先获取未授权的Request Token
  复制代码代码如下:
  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );
  $keys = $o-&gt;getRequestToken();
  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);
  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。
  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。
  2. 然后请求用户授权token
  复制代码代码如下:
  $_SESSION['keys'] = $keys;
  aurl = $o-&gt;getAuthorizeURL( $keys['oauth_token'] ,false,'');
  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。拿到$aurl后,我们可以使用header()直接跳转到那个授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会自动再次跳转回来。
  需要注意的是,需要设置session key的值,在下面获取的授权Access Token中需要。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面无法获取Access Token的值。必须记住这一点。
  3.用户最后授权的Access Token
  复制代码代码如下:
  $o = 新微博OAuth( WB_AKEY,
  WB_SKEY,
  $_SESSION['keys']['oauth_token'],
  $_SESSION['keys']['oauth_token_secret'] );
  $last_key = $o-&gt;getAccessToken( $_REQUEST['oauth_verifier']);
  回声($last_key['oauth_token']);
  以上代码最终获得了用户授权的Access Token。一共有两个值,存放在$last_key数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。
  授权后工作
  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。
  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:
  复制代码代码如下:
  //获取前20条最新更新的公众微博新闻
  $c = 新微博客户端( WB_AKEY,
  WB_SKEY,
  $oauth_token,
  $oauth_token_secret );
  $msg = $c-&gt;public_timeline();
  if ($msg === false || $msg === null){
  echo "发生错误";
  返回假;
  }
  if (isset($msg['error_code']) &amp;&amp; isset($msg['error'])){
  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error']);
  返回假;
  }
  打印_r($msg);
  通常我们拿到用户授权的access token值后,会保存在我们的user表中,对应我们应用中的账号。之后我们就不用每次调用新浪微博的API接口都去。认证。
  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有错误。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,那么使用Json格式数据有先天优势,如果返回Json格式数据,直接使用php即可。函数 json_decode() 可以转换为 PHP 常用的数组格式。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(
利用PHP进行新浪微博API开发的内容进行一个整理和说明)
  新浪微博API开发用户授权介绍(PHP基础)
  更新时间:2011-09-25 22:52:37 作者:
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。整理和说明内容
  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站是: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,
  新浪微博API开发前的准备
  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:
  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。
  新浪微博API开发最重要的用户授权流程
  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。新浪微博开放平台的OAuth授权流程非常清晰完整。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。
  1.首先获取未授权的Request Token
  复制代码代码如下:
  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );
  $keys = $o-&gt;getRequestToken();
  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);
  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。
  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。
  2. 然后请求用户授权token
  复制代码代码如下:
  $_SESSION['keys'] = $keys;
  aurl = $o-&gt;getAuthorizeURL( $keys['oauth_token'] ,false,'');
  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。拿到$aurl后,我们可以使用header()直接跳转到那个授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会自动再次跳转回来。
  需要注意的是,需要设置session key的值,在下面获取的授权Access Token中需要。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面无法获取Access Token的值。必须记住这一点。
  3.用户最后授权的Access Token
  复制代码代码如下:
  $o = 新微博OAuth( WB_AKEY,
  WB_SKEY,
  $_SESSION['keys']['oauth_token'],
  $_SESSION['keys']['oauth_token_secret'] );
  $last_key = $o-&gt;getAccessToken( $_REQUEST['oauth_verifier']);
  回声($last_key['oauth_token']);
  以上代码最终获得了用户授权的Access Token。一共有两个值,存放在$last_key数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。
  授权后工作
  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。
  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:
  复制代码代码如下:
  //获取前20条最新更新的公众微博新闻
  $c = 新微博客户端( WB_AKEY,
  WB_SKEY,
  $oauth_token,
  $oauth_token_secret );
  $msg = $c-&gt;public_timeline();
  if ($msg === false || $msg === null){
  echo "发生错误";
  返回假;
  }
  if (isset($msg['error_code']) &amp;&amp; isset($msg['error'])){
  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error']);
  返回假;
  }
  打印_r($msg);
  通常我们拿到用户授权的access token值后,会保存在我们的user表中,对应我们应用中的账号。之后我们就不用每次调用新浪微博的API接口都去。认证。
  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有错误。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,那么使用Json格式数据有先天优势,如果返回Json格式数据,直接使用php即可。函数 json_decode() 可以转换为 PHP 常用的数组格式。

使用新浪微博开放平台api同步微博内容至自己网站(关于我们Bootstrap中文网--创建于2012年的网站show出来吧)

网站优化优采云 发表了文章 • 0 个评论 • 47 次浏览 • 2022-01-01 01:16 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(关于我们Bootstrap中文网--创建于2012年的网站show出来吧)
  关于我们
  Bootstrap中文网——成立于2012年,原因是国内没有关于Bootstrap的好的中文教程和交流渠道。为此,我们翻译整理了Bootstrap文档,建立了QQ群和微博(@bootcss),以方便大家对这个CSS框架的喜爱。城市老师分享前端设计开发经验。
  展示你的 Bootstrap 作品
  你是 Bootstrap 的粉丝吗?您是否使用 Bootstrap 进行开发?你开发的网站是Powered By Bootstrap吗?然后展示你的网站表演!
  任何已经确认使用Bootstrap CSS框架的网站,我们都会在“Bootstrap优秀站推荐”列表中展示您提交的网站的截图和介绍,并有机会获得用 Bootstrap 中文在网页首页推荐。
  请发邮件至下方邮箱,并在邮件标题中注明(Bootstrap网站提交作品-网站姓名或网址)。
  邮件:
  加入我们
  Bootstrap中文网站致力于前端开发和推广。它坚持共享和开放互联网的精神。它旨在为前端攻城师和设计师之间提供一个交流的平台。如果您和我们有相同的目标,我们很乐意一起工作。行。
  如果你也热爱前端开发、Bootstrap,并且有一颗创业的心,欢迎联系我们,也欢迎你加入我们的团队!
  邮件: 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(关于我们Bootstrap中文网--创建于2012年的网站show出来吧)
  关于我们
  Bootstrap中文网——成立于2012年,原因是国内没有关于Bootstrap的好的中文教程和交流渠道。为此,我们翻译整理了Bootstrap文档,建立了QQ群和微博(@bootcss),以方便大家对这个CSS框架的喜爱。城市老师分享前端设计开发经验。
  展示你的 Bootstrap 作品
  你是 Bootstrap 的粉丝吗?您是否使用 Bootstrap 进行开发?你开发的网站是Powered By Bootstrap吗?然后展示你的网站表演!
  任何已经确认使用Bootstrap CSS框架的网站,我们都会在“Bootstrap优秀站推荐”列表中展示您提交的网站的截图和介绍,并有机会获得用 Bootstrap 中文在网页首页推荐。
  请发邮件至下方邮箱,并在邮件标题中注明(Bootstrap网站提交作品-网站姓名或网址)。
  邮件:
  加入我们
  Bootstrap中文网站致力于前端开发和推广。它坚持共享和开放互联网的精神。它旨在为前端攻城师和设计师之间提供一个交流的平台。如果您和我们有相同的目标,我们很乐意一起工作。行。
  如果你也热爱前端开发、Bootstrap,并且有一颗创业的心,欢迎联系我们,也欢迎你加入我们的团队!
  邮件:

使用新浪微博开放平台api同步微博内容至自己网站(如何把这种方法应用在组织学习中成为越来越的网络应用)

网站优化优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-01-01 01:15 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(如何把这种方法应用在组织学习中成为越来越的网络应用)
  毫无疑问,微博已经成为越来越流行的网络应用程序。如何将这种方法应用到组织学习中,使其成为一种非正式的学习方式,是很多培训管理者思考的问题。
  以新浪微博为例,企业学习推广的方式大致可以分为两种:一是直接应用模式,即直接使用新浪微博辅助培训业务,这是初级应用阶段二、内部 实施模式是在企业内部部署一套专属的企业微博,并在此基础上开始组织内部的社会化学习。这个模型比较复杂,但意义深远。是微博推广企业学习的高级阶段。本文将详细介绍这两种模式的应用方法、内容和要点。
  
  
  直接申请模式
  直接应用模式的目标是通过微博辅助传统培训业务。培训部可以通过建立培训部微博账号、协助培训项目、推广企业e-Learning等方式,达到直接申请模式的效果。
  创建微博账号的培训部门是机构的内部服务部门。一般来说,企业的培训部门没有自己的网站,缺乏与员工的沟通。因此,培训部自己的微博的创建可以作为在线服务窗口。银联培训中心、用友大学、吉利大学等企业培训中心或企业大学均建立了自己的微博账号。
  创建微博账号非常简单,只需在新浪微博上申请即可。需要注意的是,最好申请新浪代理认证。认证通过后,可以使用的微博功能将更多,包括:展示培训中心的视频或图片,专门设置咨询、留言、表扬和意见窗口,展示培训团队成员的风采。
  多功能辅助培训项目拥有专属微博账号后,培训中心可深度应用各种微博功能,辅助传统面授培训项目。新浪微博汇聚了上千款功能应用,其中不少可以辅助面授培训。我们列出了一些可以辅助训练的最常见的微博功能。
  微博大屏 “微博大屏”更适合参与人数较多的培训项目,其价值在于能够激活培训现场的互动氛围。在培训过程中,可以使用独立投影将微博大屏幕的内容投影到培训现场。讲师可以通过大屏幕采集学员的意见,学员可以通过手机微博参与培训和互动过程。有关示例,请参见图 1。
  微活动“微活动”是一个非常好的培训营销工具,适合在培训项目的前期招收学员。如果学员的微博渗透率高,可以通过“微活动”的形式开展培训项目。在“微活动”中,可以设置奖品、目标粉丝等功能,配合粉丝转发,起到培训营销的作用(见图表2).
  微群微群可以设置和邀请固定成员加入,类似QQ群的功能(见图3),适合辅助期长的培训项目。讲师或培训经理可以通过微群发布通知,< @文章、上传附件等,也可以要求学员在微群讨论问题或提交作业。培训项目结束后,微群可以解散或保留,成为积累培训资源的平台。
  促进企业电子学习。一般来说,企业在线学习侧重于自主学习,学习者之间缺乏互动。虽然有的公司在学习平台开设了BBS讨论区,但在大多数情况下,人气并不旺。培训管理者可以考虑将微博与在线学习相结合,通过微博代码嵌入等功能增强在线学习的互动性。具体可以通过以下方式实现。
  加强在线课程的互动活动。在微博上发布与在线课程话题相关的微博,引发学习者对内容的讨论,并将讨论地址链接到课程介绍等明显位置。本质是每门课程为在线课程创建一个微博讨论区。建立方式有两种:一是培训管理员可以在发布课程时同时创建微博并设置课程链接;二、直接在课件中嵌入微博讨论区的永久链接,让学习者在学习课件时可以随时进入微博参与互动。
  聚合在线学习和网络资源。通过微博的关键词聚合功能,可以将课件的内容与微博平台的内容关联起来。在海量的微博内容中,所有与网络课程相关的微博内容都可以被提取出来并按时间顺序展示在网络课件的指定位置(见图表4)。内容聚合可以让互动更深入, 将学习交流不仅扩展到在线课程的学习者,也扩展到所有微博成员。
  推广和评估在线课程。微博也可以用于在线课程的营销推广和评价,实施方法比较简单。例如,在课程开始或结束时,您可以添加“微博转发”功能,将课程的介绍、链接和简要评价转发到学习者的微博,学习者的粉丝会第一时间看到课程介绍和链接。为了扩大影响力,管理者还可以加入除新浪微博以外的其他社交网络的分享链接。
  内部实施模式 所谓内部实施模式,就是在公司内部建立一个独立完整的微博系统。企业可以在内部微博系统中建立自己的规则,比如添加V认证,风格设计,与企业的学习系统或其他信息系统有更深层次的融合。
  在企业内部建立微博的目的,不仅可以辅助传统的培训业务,还可以利用微博的实施和应用在企业内部进行社交学习,使微博成为员工分享和学习的新平台。
  新浪微博提供了一个免费的企业微博下载版——Xweibo,企业可以内部安装使用。企业版微博(Xweibo)虽然不具备新浪微博的综合功能,但具备微博发布、浏览、转发、评论、采集、话题等基本功能,并且X微博的功能也在不断升级完善本文以X微博系统为例,介绍如何在企业内部实现部署和应用。
  下载安装Xweibo的下载地址为,下载安装页面见图5。安装时需要配合技术部门,做好前期沟通和准备工作。技术人员按照下载包中的说明在企业内网完成安装后,需要进行初始化工作,主要包括以下几个方面。
  ·设置公司微博名称和·设置公司微博与新浪微博的关系·微博页面布局设计·内容规则建立可直接应用。但为了达到更好的效果,通常会与企业的其他业务系统进行集成。特别是与学习管理系统和公司现有的BBS论坛系统深度融合,更方便员工使用。微博提供了一些内置的系统集成工具,企业可以使用这些工具进行简单的集成。
  1. 定义首页链接功能:您可以通过该功能将相关学习系统的链接集成到微博首页。
  2.外部论坛插件功能:通过此功能,Xweibo可以与公司内部BBS论坛同步登录和更新。
  3.外呼工具功能:可以将“转发码”和“异地呼叫码”嵌入学习管理系统、博客、邮箱、OA等系统中,让微博内容可以以各种方式改变。表单在其他系统中显示。
  如果企业需要更深度的整合,增加个性化的功能,开发者需要在X微博上进行高级二次开发。
  只有大规模应用才能推广和应用社交学习的力量。培训经理可以根据业务需要制定推广应用策略和计划。通过企业微博的实施,促进社会学习,必须调动员工的参与度和积极性。根据X微博的特点,企业可以建立以下三种机制,打开快速应用的局面。
  X微博与新浪微博互联互通机制,所有拥有新浪微博账号的员工均可与X微博同步数据。除了微博内容,“粉丝”也可以统一。互联机制可以降低微博使用难度,简化申请流程。但需要注意的是,有些公司不希望员工发布的某些内容同步到互联网上,公司可以通过技术和系统对其进行限制。
  认证机制在企业内部开展“微博加V认证”,培训管理者可以通过这种方式提高员工参与度。 Xweibo的认证可以分类,例如可以分为技术专家、内部讲师、工作专业人士等不同类别(见图表6)。同时,它还可以与“名人管理”合作” 功能控制各类内部组织。有效管理高级和专业群体。Xweibo认证机制也是发现和梳理内部专家的最佳途径之一,将为企业知识的实施提供有效的支持和帮助管理。
  活动机制 在企业内部微博上开展各种活动,增加微博的知名度和活跃气氛。微博内置了两个活动功能模块:一个是“在线直播”,主要辅助企业的大型活动,以及微博平台上活动状态的文字直播。同时,活动现场可以与微博参与者互动;另一个是“在线访谈”与新浪微博的“微访谈”功能基本一致,管理者可以通过该功能设计和安排在线脱口秀,员工可以通过微博实时观看和参与互动。
  此外,培训经理可以考虑将日常工作和各种活动与企业微博相结合。例如,企业微博在培训项目的设计、实施、管理和评估中具有价值。内部微博在辅助培训和员工学习中的应用只是一个开始。作为企业内部的社交软件,它将成为员工之间沟通与协作的重要工具。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(如何把这种方法应用在组织学习中成为越来越的网络应用)
  毫无疑问,微博已经成为越来越流行的网络应用程序。如何将这种方法应用到组织学习中,使其成为一种非正式的学习方式,是很多培训管理者思考的问题。
  以新浪微博为例,企业学习推广的方式大致可以分为两种:一是直接应用模式,即直接使用新浪微博辅助培训业务,这是初级应用阶段二、内部 实施模式是在企业内部部署一套专属的企业微博,并在此基础上开始组织内部的社会化学习。这个模型比较复杂,但意义深远。是微博推广企业学习的高级阶段。本文将详细介绍这两种模式的应用方法、内容和要点。
  
  
  直接申请模式
  直接应用模式的目标是通过微博辅助传统培训业务。培训部可以通过建立培训部微博账号、协助培训项目、推广企业e-Learning等方式,达到直接申请模式的效果。
  创建微博账号的培训部门是机构的内部服务部门。一般来说,企业的培训部门没有自己的网站,缺乏与员工的沟通。因此,培训部自己的微博的创建可以作为在线服务窗口。银联培训中心、用友大学、吉利大学等企业培训中心或企业大学均建立了自己的微博账号。
  创建微博账号非常简单,只需在新浪微博上申请即可。需要注意的是,最好申请新浪代理认证。认证通过后,可以使用的微博功能将更多,包括:展示培训中心的视频或图片,专门设置咨询、留言、表扬和意见窗口,展示培训团队成员的风采。
  多功能辅助培训项目拥有专属微博账号后,培训中心可深度应用各种微博功能,辅助传统面授培训项目。新浪微博汇聚了上千款功能应用,其中不少可以辅助面授培训。我们列出了一些可以辅助训练的最常见的微博功能。
  微博大屏 “微博大屏”更适合参与人数较多的培训项目,其价值在于能够激活培训现场的互动氛围。在培训过程中,可以使用独立投影将微博大屏幕的内容投影到培训现场。讲师可以通过大屏幕采集学员的意见,学员可以通过手机微博参与培训和互动过程。有关示例,请参见图 1。
  微活动“微活动”是一个非常好的培训营销工具,适合在培训项目的前期招收学员。如果学员的微博渗透率高,可以通过“微活动”的形式开展培训项目。在“微活动”中,可以设置奖品、目标粉丝等功能,配合粉丝转发,起到培训营销的作用(见图表2).
  微群微群可以设置和邀请固定成员加入,类似QQ群的功能(见图3),适合辅助期长的培训项目。讲师或培训经理可以通过微群发布通知,< @文章、上传附件等,也可以要求学员在微群讨论问题或提交作业。培训项目结束后,微群可以解散或保留,成为积累培训资源的平台。
  促进企业电子学习。一般来说,企业在线学习侧重于自主学习,学习者之间缺乏互动。虽然有的公司在学习平台开设了BBS讨论区,但在大多数情况下,人气并不旺。培训管理者可以考虑将微博与在线学习相结合,通过微博代码嵌入等功能增强在线学习的互动性。具体可以通过以下方式实现。
  加强在线课程的互动活动。在微博上发布与在线课程话题相关的微博,引发学习者对内容的讨论,并将讨论地址链接到课程介绍等明显位置。本质是每门课程为在线课程创建一个微博讨论区。建立方式有两种:一是培训管理员可以在发布课程时同时创建微博并设置课程链接;二、直接在课件中嵌入微博讨论区的永久链接,让学习者在学习课件时可以随时进入微博参与互动。
  聚合在线学习和网络资源。通过微博的关键词聚合功能,可以将课件的内容与微博平台的内容关联起来。在海量的微博内容中,所有与网络课程相关的微博内容都可以被提取出来并按时间顺序展示在网络课件的指定位置(见图表4)。内容聚合可以让互动更深入, 将学习交流不仅扩展到在线课程的学习者,也扩展到所有微博成员。
  推广和评估在线课程。微博也可以用于在线课程的营销推广和评价,实施方法比较简单。例如,在课程开始或结束时,您可以添加“微博转发”功能,将课程的介绍、链接和简要评价转发到学习者的微博,学习者的粉丝会第一时间看到课程介绍和链接。为了扩大影响力,管理者还可以加入除新浪微博以外的其他社交网络的分享链接。
  内部实施模式 所谓内部实施模式,就是在公司内部建立一个独立完整的微博系统。企业可以在内部微博系统中建立自己的规则,比如添加V认证,风格设计,与企业的学习系统或其他信息系统有更深层次的融合。
  在企业内部建立微博的目的,不仅可以辅助传统的培训业务,还可以利用微博的实施和应用在企业内部进行社交学习,使微博成为员工分享和学习的新平台。
  新浪微博提供了一个免费的企业微博下载版——Xweibo,企业可以内部安装使用。企业版微博(Xweibo)虽然不具备新浪微博的综合功能,但具备微博发布、浏览、转发、评论、采集、话题等基本功能,并且X微博的功能也在不断升级完善本文以X微博系统为例,介绍如何在企业内部实现部署和应用。
  下载安装Xweibo的下载地址为,下载安装页面见图5。安装时需要配合技术部门,做好前期沟通和准备工作。技术人员按照下载包中的说明在企业内网完成安装后,需要进行初始化工作,主要包括以下几个方面。
  ·设置公司微博名称和·设置公司微博与新浪微博的关系·微博页面布局设计·内容规则建立可直接应用。但为了达到更好的效果,通常会与企业的其他业务系统进行集成。特别是与学习管理系统和公司现有的BBS论坛系统深度融合,更方便员工使用。微博提供了一些内置的系统集成工具,企业可以使用这些工具进行简单的集成。
  1. 定义首页链接功能:您可以通过该功能将相关学习系统的链接集成到微博首页。
  2.外部论坛插件功能:通过此功能,Xweibo可以与公司内部BBS论坛同步登录和更新。
  3.外呼工具功能:可以将“转发码”和“异地呼叫码”嵌入学习管理系统、博客、邮箱、OA等系统中,让微博内容可以以各种方式改变。表单在其他系统中显示。
  如果企业需要更深度的整合,增加个性化的功能,开发者需要在X微博上进行高级二次开发。
  只有大规模应用才能推广和应用社交学习的力量。培训经理可以根据业务需要制定推广应用策略和计划。通过企业微博的实施,促进社会学习,必须调动员工的参与度和积极性。根据X微博的特点,企业可以建立以下三种机制,打开快速应用的局面。
  X微博与新浪微博互联互通机制,所有拥有新浪微博账号的员工均可与X微博同步数据。除了微博内容,“粉丝”也可以统一。互联机制可以降低微博使用难度,简化申请流程。但需要注意的是,有些公司不希望员工发布的某些内容同步到互联网上,公司可以通过技术和系统对其进行限制。
  认证机制在企业内部开展“微博加V认证”,培训管理者可以通过这种方式提高员工参与度。 Xweibo的认证可以分类,例如可以分为技术专家、内部讲师、工作专业人士等不同类别(见图表6)。同时,它还可以与“名人管理”合作” 功能控制各类内部组织。有效管理高级和专业群体。Xweibo认证机制也是发现和梳理内部专家的最佳途径之一,将为企业知识的实施提供有效的支持和帮助管理。
  活动机制 在企业内部微博上开展各种活动,增加微博的知名度和活跃气氛。微博内置了两个活动功能模块:一个是“在线直播”,主要辅助企业的大型活动,以及微博平台上活动状态的文字直播。同时,活动现场可以与微博参与者互动;另一个是“在线访谈”与新浪微博的“微访谈”功能基本一致,管理者可以通过该功能设计和安排在线脱口秀,员工可以通过微博实时观看和参与互动。
  此外,培训经理可以考虑将日常工作和各种活动与企业微博相结合。例如,企业微博在培训项目的设计、实施、管理和评估中具有价值。内部微博在辅助培训和员工学习中的应用只是一个开始。作为企业内部的社交软件,它将成为员工之间沟通与协作的重要工具。

使用新浪微博开放平台api同步微博内容至自己网站(这是第一篇:关于uploadAPI的OAuth验证失败问题(组图))

网站优化优采云 发表了文章 • 0 个评论 • 50 次浏览 • 2021-12-31 23:32 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(这是第一篇:关于uploadAPI的OAuth验证失败问题(组图))
  新浪微博很受欢迎,开放平台很受欢迎,开发者很受欢迎。
  开发者受欢迎是因为新浪微博开放平台对开发者非常不友好,其API从实现到文档都很粗糙。
  API 实现不规范,可以容忍,但是文档没有解释清楚,开发者自己探索是很离谱的。新浪似乎还没有来得及照顾第三方开发者,开放平台现在只是“开门见山”。结果就是开发者折腾了很多没有意义的东西,浪费时间!
  我写这一系列文章的目的是为了避免后来者犯同样的罪。
  这是上传AP​​I OAuth认证失败的第一篇。去论坛搜索上传就知道有多少人受苦了。
  Upload API 的 OAuth 之所以难,部分是因为它的 HTTP 请求格式的特殊性,主要是因为新浪微博的实现令人难以置信。
  Upload API 的特殊性在于它的请求“使用多部分/表单数据编码提交”。根据OAuth1.0协议,Content-Type为multipart/form-data的HTTP请求的entity body不参与OAuth签名。因此,上传API的OAuth应该比其他普通API简单,因为签名只涉及OAuth参数(以oauth_开头的一系列特殊参数)。因此,标准的签名基字符串应该是:
  POSThttp%3A%2F %% 2Fstatuses%2Fupload.jsonoauth_consumer_key%3Dxxxxxxxxxx%26oauth_nonce%3D798014939%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1312912324%26oauth_version%3D1312912324%26oauth_version%3D1312912324%26oauth_ytoken0
  对应的标准授权头应该是:
  OAuth oauth_consumer_key=xxxxxxxxxx、oauth_token=yyyyyyyyyy、oauth_signature_method=HMAC-SHA1、oauth_version=1.0、oauth_nonce=798014939、oauth_nonce=798014939、oauth_nonce=798014939、oauth_nonce=798014939、oauth33331231时间oauth_signature_method=HMAC-SHA1
  但是,您会收到:
  40107:Oauth 错误:signature_invalid!
  这是因为新浪微博上传API的实现需要签名基串收录pic以外的参数。所以新浪微博需要的Signature Base String是这样的:
  POSThttp%3A%2F%%2Fstatuses%2Fupload.jsonlat%3D37.78711200%26long%3D-122.40846000%26oauth_consumer_key%3Dxxxxxxxxxx%26oauth%258oth%258oth%26588oth%268588888888888885 _signature_method3 26oauth_timestamp%3D1312912886%26oauth_token%3Dyyyyyyyyyy%26oauth_version%3D1.0%26status%3DPic
  问题出在这里:status、lat、long参数是在entity body中提交的。如前所述,它们不参与 OAuth 签名。为了符合 OAuth 协议,必须将这些参数添加到 URL 查询字符串或 Authorization 标头中。
  规范的开发者这样做了,结果“错了”。新浪微博服务器依旧返回:
  40107:Oauth 错误:signature_invalid!
  其实不管怎么折腾,只要遵循OAuth协议,肯定是甩不掉的,因为新浪微博不遵循OAuth协议。
  对于 Content-Type 为 multipart/form-data 的 HTTP 请求,新浪微博要求非二进制参数(如上传 API 中的 pic 参数)参与 OAuth 签名,并且还要求这些参数是“非原创的” ”。换句话说,Signature Base String 必须收录这些参数,但这些参数不能出现在 URL 查询字符串或 Authorization 标头中。这意味着新浪微博服务器收到请求后,会从实体主体中提取这些参数进行OAuth签名验证。再一次,对于 Content-Type 是 multipart/form-data 的 HTTP 请求,这违反了 OAuth 协议。但是在新浪微博上,我们必须违反OAuth协议才能通过OAuth验证。
  即使你不考虑像我这样费时费力的探索过程,新浪微博的非标准实现也给开发者带来了很多麻烦,因为它导致了很多OAuth库的追随OAuth 协议无法直接使用。
  在折腾的过程中,我还发现了另一个可怕的bug。如果pic的Content-Disposition头部缺少filename参数,新浪微博也会返回“40107:Oauth Error:signature_invalid!”,虽然pic和OAuth没有关系,虽然按照标准是不需要filename的,但实际上文件名在此处没用。
  最后总结一下获取新浪微博上传API的“正确”方式:
  所有参数均以 multipart/form-data 格式提交,不能出现在 URL 查询字符串或 Authorization 标头中。除 pic 外的所有参数都输入 Signature Base String 以参与 OAuth 签名。 pic 的 Content-Disposition 头必须收录 filename 参数。
  官方论坛帮助不大,哭了很多,但是省的少。未做UTF-8编码或URL编码导致OAuth认证失败是开发者自身的错。本文也适用于其他使用 multipart/form-data 编码提交 HTTP 请求的 API,例如 update_profile_image。
  转载原文 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(这是第一篇:关于uploadAPI的OAuth验证失败问题(组图))
  新浪微博很受欢迎,开放平台很受欢迎,开发者很受欢迎。
  开发者受欢迎是因为新浪微博开放平台对开发者非常不友好,其API从实现到文档都很粗糙。
  API 实现不规范,可以容忍,但是文档没有解释清楚,开发者自己探索是很离谱的。新浪似乎还没有来得及照顾第三方开发者,开放平台现在只是“开门见山”。结果就是开发者折腾了很多没有意义的东西,浪费时间!
  我写这一系列文章的目的是为了避免后来者犯同样的罪。
  这是上传AP​​I OAuth认证失败的第一篇。去论坛搜索上传就知道有多少人受苦了。
  Upload API 的 OAuth 之所以难,部分是因为它的 HTTP 请求格式的特殊性,主要是因为新浪微博的实现令人难以置信。
  Upload API 的特殊性在于它的请求“使用多部分/表单数据编码提交”。根据OAuth1.0协议,Content-Type为multipart/form-data的HTTP请求的entity body不参与OAuth签名。因此,上传API的OAuth应该比其他普通API简单,因为签名只涉及OAuth参数(以oauth_开头的一系列特殊参数)。因此,标准的签名基字符串应该是:
  POSThttp%3A%2F %% 2Fstatuses%2Fupload.jsonoauth_consumer_key%3Dxxxxxxxxxx%26oauth_nonce%3D798014939%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1312912324%26oauth_version%3D1312912324%26oauth_version%3D1312912324%26oauth_ytoken0
  对应的标准授权头应该是:
  OAuth oauth_consumer_key=xxxxxxxxxx、oauth_token=yyyyyyyyyy、oauth_signature_method=HMAC-SHA1、oauth_version=1.0、oauth_nonce=798014939、oauth_nonce=798014939、oauth_nonce=798014939、oauth_nonce=798014939、oauth33331231时间oauth_signature_method=HMAC-SHA1
  但是,您会收到:
  40107:Oauth 错误:signature_invalid!
  这是因为新浪微博上传API的实现需要签名基串收录pic以外的参数。所以新浪微博需要的Signature Base String是这样的:
  POSThttp%3A%2F%%2Fstatuses%2Fupload.jsonlat%3D37.78711200%26long%3D-122.40846000%26oauth_consumer_key%3Dxxxxxxxxxx%26oauth%258oth%258oth%26588oth%268588888888888885 _signature_method3 26oauth_timestamp%3D1312912886%26oauth_token%3Dyyyyyyyyyy%26oauth_version%3D1.0%26status%3DPic
  问题出在这里:status、lat、long参数是在entity body中提交的。如前所述,它们不参与 OAuth 签名。为了符合 OAuth 协议,必须将这些参数添加到 URL 查询字符串或 Authorization 标头中。
  规范的开发者这样做了,结果“错了”。新浪微博服务器依旧返回:
  40107:Oauth 错误:signature_invalid!
  其实不管怎么折腾,只要遵循OAuth协议,肯定是甩不掉的,因为新浪微博不遵循OAuth协议。
  对于 Content-Type 为 multipart/form-data 的 HTTP 请求,新浪微博要求非二进制参数(如上传 API 中的 pic 参数)参与 OAuth 签名,并且还要求这些参数是“非原创的” ”。换句话说,Signature Base String 必须收录这些参数,但这些参数不能出现在 URL 查询字符串或 Authorization 标头中。这意味着新浪微博服务器收到请求后,会从实体主体中提取这些参数进行OAuth签名验证。再一次,对于 Content-Type 是 multipart/form-data 的 HTTP 请求,这违反了 OAuth 协议。但是在新浪微博上,我们必须违反OAuth协议才能通过OAuth验证。
  即使你不考虑像我这样费时费力的探索过程,新浪微博的非标准实现也给开发者带来了很多麻烦,因为它导致了很多OAuth库的追随OAuth 协议无法直接使用。
  在折腾的过程中,我还发现了另一个可怕的bug。如果pic的Content-Disposition头部缺少filename参数,新浪微博也会返回“40107:Oauth Error:signature_invalid!”,虽然pic和OAuth没有关系,虽然按照标准是不需要filename的,但实际上文件名在此处没用。
  最后总结一下获取新浪微博上传API的“正确”方式:
  所有参数均以 multipart/form-data 格式提交,不能出现在 URL 查询字符串或 Authorization 标头中。除 pic 外的所有参数都输入 Signature Base String 以参与 OAuth 签名。 pic 的 Content-Disposition 头必须收录 filename 参数。
  官方论坛帮助不大,哭了很多,但是省的少。未做UTF-8编码或URL编码导致OAuth认证失败是开发者自身的错。本文也适用于其他使用 multipart/form-data 编码提交 HTTP 请求的 API,例如 update_profile_image。
  转载原文

使用新浪微博开放平台api同步微博内容至自己网站( api访问:2019-07-15本文章(图))

网站优化优采云 发表了文章 • 0 个评论 • 47 次浏览 • 2021-12-31 11:28 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(
api访问:2019-07-15本文章(图))
  Python访问微博第三方API 2 访问用户登录和微博发布
  时间:2019-07-15
  本文章为大家介绍python访问微博第三方API 2访问用户登录和微博发布,主要包括python访问微博第三方API 2访问用户登录和微博发布使用示例、应用技巧、基础总结知识点和注意事项,有一定的参考价值,有需要的朋友可以参考。
  Python访问微博第三方API 2 访问用户登录和微博发布
  # coding=utf-8
import requests
import json
import MySQLdb
from datetime import datetime
from flask import Flask, redirect, request
app = Flask(__name__)
# 全局变量token
token = {}
def get_ticket():
# App Key:13866668888 app key就是url中的 YOUR_CLIENT_ID
# YOUR_REGISTERED_REDIRECT_URI就是 http://test.chinasoft.com
client_id = 13866668888
redirect_url = "http://test.chinasoft.com/a"
url = 'https://api.weibo.com/oauth2/authorize?client_id={app_key}&response_type=code&redirect_uri={redirect_url}'.format(app_key = client_id, redirect_url = redirect_url)
return url
def get_token(code):
# App Secret:6dc11f2039
redirect_url = "http://test.chinasoft.com/a"
client_secret = "6dc11f2039"
client_id = 13866668888
url = "https://api.weibo.com/oauth2/a ... id%3D{client_id}&client_secret={client_secret}&grant_type=authorization_code&redirect_uri={redirect_url}&code={code}".format(client_id = client_id,client_secret = client_secret,redirect_url = redirect_url,code = code)
resp = requests.post(url)
global token
token = resp.json()
return token
def get_info(access_token, uid):
url = "https://api.weibo.com/2/users/show.json"
resp = requests.get(url, params = {
'access_token':access_token,
'uid':uid
})
return resp.json()
def get_conn():
""" 获取mysql的连接"""
try:
conn = MySQLdb.connect(
host="localhost",
port=3306,
user="root",
password="root",
db="user_grade",
)
except MySQLdb.Error as e:
print("Error %d:%s" % (e.args[0], e.args[1]))
return conn
def weibo_share(access_token):
url = "https://api.weibo.com/2/statuses/share.json"
resp = requests.post(url, {
'access_token':access_token,
'status':'现在是北京时间:{0} http://test.chinasoft.com'.format(datetime.now())
})
return resp.json()
@app.route('/a')
def index():
code = request.args.get('code', None)
# 根据code获取token
token = get_token(code)
# 获取用户信息
user_info = get_info(token['access_token'], token['uid'])
third_id = user_info['id']
nickname = user_info['screen_name']
headimg = user_info['profile_image_url']
# 获取数据库的连接,将用户信息存入到数据库中
# create table user(third_id int,nickname varchar(255),headimg varchar(1000));
conn = get_conn()
cur = conn.cursor()
# 注意 sql中的 values中的字段一定要加 单引号,否则会报错
sql = "insert into user(third_id,nickname,headimg) values('{third_id}','{nickname}','{headimg}')".format(third_id = third_id,nickname = nickname,headimg = headimg)
cur.execute(sql)
conn.autocommit(True)
return json.dumps(user_info)
@app.route('/weibo')
def weibo():
ticket = get_ticket()
return redirect(ticket)
@app.route('/share')
def share():
ticket = get_ticket()
rest = weibo_share(token['access_token'])
return json.dumps(rest)
if __name__ == '__main__':
app.run(port=80, debug=True)
  登录接口
  访问量:5000/微博
  获取令牌 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(
api访问:2019-07-15本文章(图))
  Python访问微博第三方API 2 访问用户登录和微博发布
  时间:2019-07-15
  本文章为大家介绍python访问微博第三方API 2访问用户登录和微博发布,主要包括python访问微博第三方API 2访问用户登录和微博发布使用示例、应用技巧、基础总结知识点和注意事项,有一定的参考价值,有需要的朋友可以参考。
  Python访问微博第三方API 2 访问用户登录和微博发布
  # coding=utf-8
import requests
import json
import MySQLdb
from datetime import datetime
from flask import Flask, redirect, request
app = Flask(__name__)
# 全局变量token
token = {}
def get_ticket():
# App Key:13866668888 app key就是url中的 YOUR_CLIENT_ID
# YOUR_REGISTERED_REDIRECT_URI就是 http://test.chinasoft.com
client_id = 13866668888
redirect_url = "http://test.chinasoft.com/a"
url = 'https://api.weibo.com/oauth2/authorize?client_id={app_key}&response_type=code&redirect_uri={redirect_url}'.format(app_key = client_id, redirect_url = redirect_url)
return url
def get_token(code):
# App Secret:6dc11f2039
redirect_url = "http://test.chinasoft.com/a"
client_secret = "6dc11f2039"
client_id = 13866668888
url = "https://api.weibo.com/oauth2/a ... id%3D{client_id}&client_secret={client_secret}&grant_type=authorization_code&redirect_uri={redirect_url}&code={code}".format(client_id = client_id,client_secret = client_secret,redirect_url = redirect_url,code = code)
resp = requests.post(url)
global token
token = resp.json()
return token
def get_info(access_token, uid):
url = "https://api.weibo.com/2/users/show.json"
resp = requests.get(url, params = {
'access_token':access_token,
'uid':uid
})
return resp.json()
def get_conn():
""" 获取mysql的连接"""
try:
conn = MySQLdb.connect(
host="localhost",
port=3306,
user="root",
password="root",
db="user_grade",
)
except MySQLdb.Error as e:
print("Error %d:%s" % (e.args[0], e.args[1]))
return conn
def weibo_share(access_token):
url = "https://api.weibo.com/2/statuses/share.json"
resp = requests.post(url, {
'access_token':access_token,
'status':'现在是北京时间:{0} http://test.chinasoft.com'.format(datetime.now())
})
return resp.json()
@app.route('/a')
def index():
code = request.args.get('code', None)
# 根据code获取token
token = get_token(code)
# 获取用户信息
user_info = get_info(token['access_token'], token['uid'])
third_id = user_info['id']
nickname = user_info['screen_name']
headimg = user_info['profile_image_url']
# 获取数据库的连接,将用户信息存入到数据库中
# create table user(third_id int,nickname varchar(255),headimg varchar(1000));
conn = get_conn()
cur = conn.cursor()
# 注意 sql中的 values中的字段一定要加 单引号,否则会报错
sql = "insert into user(third_id,nickname,headimg) values('{third_id}','{nickname}','{headimg}')".format(third_id = third_id,nickname = nickname,headimg = headimg)
cur.execute(sql)
conn.autocommit(True)
return json.dumps(user_info)
@app.route('/weibo')
def weibo():
ticket = get_ticket()
return redirect(ticket)
@app.route('/share')
def share():
ticket = get_ticket()
rest = weibo_share(token['access_token'])
return json.dumps(rest)
if __name__ == '__main__':
app.run(port=80, debug=True)
  登录接口
  访问量:5000/微博
  获取令牌

使用新浪微博开放平台api同步微博内容至自己网站(文档_V23.API错误代码说明()(图))

网站优化优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2021-12-30 03:19 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(文档_V23.API错误代码说明()(图))
  文档_V2
  3.API 错误码描述地址:
  4.iOS SDK 地址:
  5.授权机制:
  授权机制说明
  6.开发者管理中心
  利用:
  在管理中心创建自己的应用后,会得到AppKey和App Secret
  这两个值是初始化新浪微博SDK必须用到的两个参数。
  执行登录功能时可能遇到的错误如下
  1:访问错误提示
  
  表示:微博SDK初始化时设置的appRedirectURI和微博开放平台-开发者管理中心-应用信息-高级信息-OAuth2.0 授权设置-授权回调页面
  如果设定值不同,就会出现上述错误。
  
  
  2:调用新浪微博客户端授权后,应用没有正常返回。
  1:检查URL类型“URL方案”是否命名为:sinaweibosso。如图添加AppID:
  
  2:在AppDelegate中是否实现了委托功能:
  -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"%@",url.scheme);
//如果涉及其他应用交互,请做如下判断,例如:还可能和新浪微博进行交互
if ([url.scheme isEqualToString:Key_weiXinAppID]) {
return [WXApi handleOpenURL:url delegate:self];
}else if ([url.scheme isEqualToString:[@"sinaweibosso" stringByAppendingPathExtension:Key_sinaWeiboAppID]])
{
return [[SinaWeiBoManage defaultInstance].sinaWeibo handleOpenURL:url];
}else
{
return YES;
}
}
  完成上述设置后,将无意外地响应授权结果。
  接下来,我们主要开始调用API与微博数据进行交互。
  举个简单的例子,如何获取授权用户的个人信息:
  NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:userId forKey:@"uid"];
[sinaWeibo requestWithURL:@"users/show.json"
params:params
httpMethod:@"GET"
delegate:self];
  具体需要传入的参数请参考官方API文档。
  得到结果后,会响应委托成功或失败:
  这时候可以通过链接名来识别请求类型:
  - (void)request:(SinaWeiboRequest *)request didFailWithError:(NSError *)error
{
//获取关注列表
if ([request.url hasSuffix:@"friendships/friends.json"])
{
if ([delegate respondsToSelector:@selector(sinaWeiBoManage:withFriendListResult:withRequestDataType:isSuccess:)]) {
[delegate sinaWeiBoManage:self withFriendListResult:nil withRequestDataType:self.requestDataType isSuccess:NO];
}
}
}
  关于iOS 6内置微博功能:
  在iOS6中,苹果集成了新浪微博的社交环境,所以如果用户在设置界面对新浪微博账号进行了授权,就可以直接在我们的第三方应用中使用,用于发布微博等。
  先介绍两个新框架
  他们是:
  Accounts.framework:用于在系统设置中获取账户信息
  Social.framework:用于与第三方开放平台进行数据交互。
  该过程分为两个步骤:
  首先要知道用户是否在系统设置中对相应的账号进行了授权。
  获取到相应的账号信息后,即可开始与第三方开放平台进行数据交互,代码如下:
  // Create an account store object. 创建账户集合
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
// Create an account type that ensures Twitter accounts are retrieved. 确定好 账户类型 新浪微博 还是 Facebook 还是 Twitter
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierSinaWeibo];
// Request access from the user to use their Twitter accounts. //异步请求 来得到对应类型的账户信息
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
if(granted) {//如果 granted 返回 NO 表示一个账户都没有设置
// Get the list of Twitter accounts.
NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; //可能存在多个,看你要用哪个,最好让用户选择一下

// For the sake of brevity, we&#39;ll assume there is only one Twitter account present.
// You would ideally ask the user which account they want to tweet from, if there is more than one Twitter account present.
if ([accountsArray count] > 0) {
// Grab the initial Twitter account to tweet from.
ACAccount *sinaWeiboAccount = [accountsArray objectAtIndex:0];

NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"一条新的微博" forKey:@"status"];
SLRequest *slRequest = [SLRequest requestForServiceType:SLServiceTypeSinaWeibo requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://open.weibo.cn/2/statuses/update.json"] parameters:params];
slRequest.account = sinaWeiboAccount;//这行代码一定要赋值,负责数据交互一定失败
[slRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSLog(@"%@ %@",urlResponse.URL,error);

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dic);
}];

}
}
}];
  获得每个 ACAccount 后,它就有了一个标识符。最好在用户确认使用哪个账号的时候保存,这样下次可以直接通过下面的代码获取对应的账号
  [accountStore accountWithIdentifier:sinaWeiboAccount.identifier];
  总结:
  SNS作为应用推广的主要方式,必须认真研究。如何唤起和激发用户的分享欲望,让更多人知道你的应用,那么成功就在不远处。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(文档_V23.API错误代码说明()(图))
  文档_V2
  3.API 错误码描述地址:
  4.iOS SDK 地址:
  5.授权机制:
  授权机制说明
  6.开发者管理中心
  利用:
  在管理中心创建自己的应用后,会得到AppKey和App Secret
  这两个值是初始化新浪微博SDK必须用到的两个参数。
  执行登录功能时可能遇到的错误如下
  1:访问错误提示
  
  表示:微博SDK初始化时设置的appRedirectURI和微博开放平台-开发者管理中心-应用信息-高级信息-OAuth2.0 授权设置-授权回调页面
  如果设定值不同,就会出现上述错误。
  
  
  2:调用新浪微博客户端授权后,应用没有正常返回。
  1:检查URL类型“URL方案”是否命名为:sinaweibosso。如图添加AppID:
  
  2:在AppDelegate中是否实现了委托功能:
  -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"%@",url.scheme);
//如果涉及其他应用交互,请做如下判断,例如:还可能和新浪微博进行交互
if ([url.scheme isEqualToString:Key_weiXinAppID]) {
return [WXApi handleOpenURL:url delegate:self];
}else if ([url.scheme isEqualToString:[@"sinaweibosso" stringByAppendingPathExtension:Key_sinaWeiboAppID]])
{
return [[SinaWeiBoManage defaultInstance].sinaWeibo handleOpenURL:url];
}else
{
return YES;
}
}
  完成上述设置后,将无意外地响应授权结果。
  接下来,我们主要开始调用API与微博数据进行交互。
  举个简单的例子,如何获取授权用户的个人信息:
  NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:userId forKey:@"uid"];
[sinaWeibo requestWithURL:@"users/show.json"
params:params
httpMethod:@"GET"
delegate:self];
  具体需要传入的参数请参考官方API文档。
  得到结果后,会响应委托成功或失败:
  这时候可以通过链接名来识别请求类型:
  - (void)request:(SinaWeiboRequest *)request didFailWithError:(NSError *)error
{
//获取关注列表
if ([request.url hasSuffix:@"friendships/friends.json"])
{
if ([delegate respondsToSelector:@selector(sinaWeiBoManage:withFriendListResult:withRequestDataType:isSuccess:)]) {
[delegate sinaWeiBoManage:self withFriendListResult:nil withRequestDataType:self.requestDataType isSuccess:NO];
}
}
}
  关于iOS 6内置微博功能:
  在iOS6中,苹果集成了新浪微博的社交环境,所以如果用户在设置界面对新浪微博账号进行了授权,就可以直接在我们的第三方应用中使用,用于发布微博等。
  先介绍两个新框架
  他们是:
  Accounts.framework:用于在系统设置中获取账户信息
  Social.framework:用于与第三方开放平台进行数据交互。
  该过程分为两个步骤:
  首先要知道用户是否在系统设置中对相应的账号进行了授权。
  获取到相应的账号信息后,即可开始与第三方开放平台进行数据交互,代码如下:
  // Create an account store object. 创建账户集合
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
// Create an account type that ensures Twitter accounts are retrieved. 确定好 账户类型 新浪微博 还是 Facebook 还是 Twitter
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierSinaWeibo];
// Request access from the user to use their Twitter accounts. //异步请求 来得到对应类型的账户信息
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
if(granted) {//如果 granted 返回 NO 表示一个账户都没有设置
// Get the list of Twitter accounts.
NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; //可能存在多个,看你要用哪个,最好让用户选择一下

// For the sake of brevity, we&#39;ll assume there is only one Twitter account present.
// You would ideally ask the user which account they want to tweet from, if there is more than one Twitter account present.
if ([accountsArray count] > 0) {
// Grab the initial Twitter account to tweet from.
ACAccount *sinaWeiboAccount = [accountsArray objectAtIndex:0];

NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"一条新的微博" forKey:@"status"];
SLRequest *slRequest = [SLRequest requestForServiceType:SLServiceTypeSinaWeibo requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://open.weibo.cn/2/statuses/update.json"] parameters:params];
slRequest.account = sinaWeiboAccount;//这行代码一定要赋值,负责数据交互一定失败
[slRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSLog(@"%@ %@",urlResponse.URL,error);

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dic);
}];

}
}
}];
  获得每个 ACAccount 后,它就有了一个标识符。最好在用户确认使用哪个账号的时候保存,这样下次可以直接通过下面的代码获取对应的账号
  [accountStore accountWithIdentifier:sinaWeiboAccount.identifier];
  总结:
  SNS作为应用推广的主要方式,必须认真研究。如何唤起和激发用户的分享欲望,让更多人知道你的应用,那么成功就在不远处。

使用新浪微博开放平台api同步微博内容至自己网站(文本中要加入安全域名下的一个网址,敲黑板!)

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2021-12-30 03:15 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(文本中要加入安全域名下的一个网址,敲黑板!)
  一、说明
  2017-06-26 微博公告,对界面做了一些改动:
  statuses/repost 转发一条微博
statuses/update 发布一条微博
statuses/upload 上传图片并发布一条微博
statuses/upload_url_text 发布一条微博同时指定上传的图片
statuses/destroy 删除微博
  上面的接口被取消了。
  (网上大部分资料都是老界面写的,难怪我用老界面好久没成功,汗)
  改用新界面:状态/分享第三方分享链接到微博
  先看一下接口的说明:
  
  图片.png
  我们可以看到status参数的描述特别长。
  有一句话需要特别注意:
  “同时,正文中必须至少收录
一个分享到微博的第三方网页网址,且该网址只能是第三方(调用方)绑定域下的URL链接。绑定域在“我的”应用-应用信息-编辑基本应用信息-在“安全域名”中设置。
  官方用词晦涩难懂,但通俗易懂:
  “文本中必须收录
一个网址,该网址不能是随机的,必须是应用后台设置的安全域名下的网址。”
  二、具体用途
  什么是“安全域名”?我读书少,所以不要假装是 13。
  还记得在哪里填写“申请地址”和“申请资料”吗?
  
  图片.png
  然后它在右边看起来像这样:
  
  图片.png
  你看见了吗?这是一个安全的域名。如果您的信息在此处为空,请快速设置。
  需要注意的一件事是:
  
  图片.png
  这个好像不用加“”,不然会报错。
  如果它不起作用,您也可以使用我的:
  (我也用别人的)
  那么重点来了!敲黑板!!敲黑板!!!
  我们需要在文本中添加安全域名下的URL,这次我们需要添加“”,像这样:
  
  图片.png
  发布后是这样的:
  
  F7B691B(`05(LJ_NGOGW4`T.jpg
  如果没有设置安全域名或文本中不收录
安全域名,则会出现错误:
  {"error":"text not find domain!","error_code":10017,"request":"/2/statuses/share.json"}
  关于“必须做URLencode”,我没有做这一步,但是不影响简单的微博发布。
  以后的问题,可能只会出在这个地方,所以提醒一下。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(文本中要加入安全域名下的一个网址,敲黑板!)
  一、说明
  2017-06-26 微博公告,对界面做了一些改动:
  statuses/repost 转发一条微博
statuses/update 发布一条微博
statuses/upload 上传图片并发布一条微博
statuses/upload_url_text 发布一条微博同时指定上传的图片
statuses/destroy 删除微博
  上面的接口被取消了。
  (网上大部分资料都是老界面写的,难怪我用老界面好久没成功,汗)
  改用新界面:状态/分享第三方分享链接到微博
  先看一下接口的说明:
  
  图片.png
  我们可以看到status参数的描述特别长。
  有一句话需要特别注意:
  “同时,正文中必须至少收录
一个分享到微博的第三方网页网址,且该网址只能是第三方(调用方)绑定域下的URL链接。绑定域在“我的”应用-应用信息-编辑基本应用信息-在“安全域名”中设置。
  官方用词晦涩难懂,但通俗易懂:
  “文本中必须收录
一个网址,该网址不能是随机的,必须是应用后台设置的安全域名下的网址。”
  二、具体用途
  什么是“安全域名”?我读书少,所以不要假装是 13。
  还记得在哪里填写“申请地址”和“申请资料”吗?
  
  图片.png
  然后它在右边看起来像这样:
  
  图片.png
  你看见了吗?这是一个安全的域名。如果您的信息在此处为空,请快速设置。
  需要注意的一件事是:
  
  图片.png
  这个好像不用加“”,不然会报错。
  如果它不起作用,您也可以使用我的:
  (我也用别人的)
  那么重点来了!敲黑板!!敲黑板!!!
  我们需要在文本中添加安全域名下的URL,这次我们需要添加“”,像这样:
  
  图片.png
  发布后是这样的:
  
  F7B691B(`05(LJ_NGOGW4`T.jpg
  如果没有设置安全域名或文本中不收录
安全域名,则会出现错误:
  {"error":"text not find domain!","error_code":10017,"request":"/2/statuses/share.json"}
  关于“必须做URLencode”,我没有做这一步,但是不影响简单的微博发布。
  以后的问题,可能只会出在这个地方,所以提醒一下。

使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台API的调用和TWITTER接口一样,都是受限的)

网站优化优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2021-12-29 19:10 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台API的调用和TWITTER接口一样,都是受限的)
  新浪微博开放平台API调用与TWITTER接口相同,均以小时为单位进行限制和限制。
  他有两个限制原则
  1.用户不按IP限制登录,每小时1000次
  2. 用户以基于用户的限制登录,每小时1000次
  如果应用是用户未登录,则IP被限制。建议登录破解瓶颈,否则不讨论。
  新浪给出了具体限制
  开发者可以通过 rate_limit_status 接口查看调用频率
  rate_limit_status 接口文档
  接口返回如下信息
  数组([remaining_hits] =&gt; 999 [hourly_limit] =&gt; 1000 [reset_time_in_seconds] =&gt; 2717 [reset_time] =&gt; 12 月 14 日星期二 17:00:00 +0800 2010)
  代表
  剩余数量为999次,
  每小时限制1000次,
  计数器清零剩余时间2717秒,
  下次重置时间为17:00。
  这样的调用频率对于非授权的小应用来说已经不够用了。最简单的方法是使用多个账号和多个APP_KEY,相当于做一个账号轮询。
  首先,多注册几个微博账号,将它们存储在一个数组中,每次随机调用一个,这样可以轻松使限制达到3000。
  $wb_id = array(,, );
  列表($wb_name,$wb_password)=explode(“|”,$wb_id[array_rand($wb_id)]);
  如果用同样的方法列出几个APP_KEY,重复组合,就会更多。比如2个APP_KEY,3个账号,上限可以达到6000。
  我个人用了3个APP_KEY,4个账号,每小时1.2万就够了。
  快速注册微博账号的另一种方式
  第一步,
  去gmail注册一个长账号,多长时间?反正越长越好,一个原则信比你想注册的微博账号长
  例如
  第二步,
  使用此账号在新浪注册
  第一次使用
  第二次使用
  第三次使用
  ....
  以此类推,一个邮箱可以注册多个新浪微博。无需来回重新注册邮箱。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台API的调用和TWITTER接口一样,都是受限的)
  新浪微博开放平台API调用与TWITTER接口相同,均以小时为单位进行限制和限制。
  他有两个限制原则
  1.用户不按IP限制登录,每小时1000次
  2. 用户以基于用户的限制登录,每小时1000次
  如果应用是用户未登录,则IP被限制。建议登录破解瓶颈,否则不讨论。
  新浪给出了具体限制
  开发者可以通过 rate_limit_status 接口查看调用频率
  rate_limit_status 接口文档
  接口返回如下信息
  数组([remaining_hits] =&gt; 999 [hourly_limit] =&gt; 1000 [reset_time_in_seconds] =&gt; 2717 [reset_time] =&gt; 12 月 14 日星期二 17:00:00 +0800 2010)
  代表
  剩余数量为999次,
  每小时限制1000次,
  计数器清零剩余时间2717秒,
  下次重置时间为17:00。
  这样的调用频率对于非授权的小应用来说已经不够用了。最简单的方法是使用多个账号和多个APP_KEY,相当于做一个账号轮询。
  首先,多注册几个微博账号,将它们存储在一个数组中,每次随机调用一个,这样可以轻松使限制达到3000。
  $wb_id = array(,, );
  列表($wb_name,$wb_password)=explode(“|”,$wb_id[array_rand($wb_id)]);
  如果用同样的方法列出几个APP_KEY,重复组合,就会更多。比如2个APP_KEY,3个账号,上限可以达到6000。
  我个人用了3个APP_KEY,4个账号,每小时1.2万就够了。
  快速注册微博账号的另一种方式
  第一步,
  去gmail注册一个长账号,多长时间?反正越长越好,一个原则信比你想注册的微博账号长
  例如
  第二步,
  使用此账号在新浪注册
  第一次使用
  第二次使用
  第三次使用
  ....
  以此类推,一个邮箱可以注册多个新浪微博。无需来回重新注册邮箱。

使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站!)

网站优化优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2021-12-28 09:01 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站!)
  使用新浪微博开放平台api同步微博内容至自己网站!开放平台开放了不止一项开放接口,同时还提供数据抓取接口供大家方便快捷的搜索到数据。欢迎大家使用新浪微博开放平台,有需要的朋友可以私信我。如果你也需要一份专业的微博python开发指南,欢迎在简书留言。
  用python保存每条微博到excel表。需要转载/收藏微博时,按比例分析转载数量获取转发数量、点赞数量、评论数量。根据相应关键字追加微博,保存在excel表格中。
  github-myblogpicker-知乎专栏微博数据库文档。可以根据需要定制增删改查,相当不错。
  爬虫和数据库分析类库不错,
  即刻采集了最受欢迎排行榜、发现频道排行榜、问答、评论排行榜、特色排行榜、热门采访等数十大排行榜分类。通过直接获取公共注册账号的公共发言、评论数据,或者分析出不同用户的喜好,满足你想知道某一条微博是否被采集的需求。例如:根据发起发起人、话题类型、话题热度、发帖时间、微博简介等分析微博热度,以及用户的最爱。
  文章采集方面,还有新浪微博采集器这是一款相当好用的采集器,直接下载安装,不要wifi什么都,随用随开,实时采集,采自己想采的数据,
  foobar2000, 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站!)
  使用新浪微博开放平台api同步微博内容至自己网站!开放平台开放了不止一项开放接口,同时还提供数据抓取接口供大家方便快捷的搜索到数据。欢迎大家使用新浪微博开放平台,有需要的朋友可以私信我。如果你也需要一份专业的微博python开发指南,欢迎在简书留言。
  用python保存每条微博到excel表。需要转载/收藏微博时,按比例分析转载数量获取转发数量、点赞数量、评论数量。根据相应关键字追加微博,保存在excel表格中。
  github-myblogpicker-知乎专栏微博数据库文档。可以根据需要定制增删改查,相当不错。
  爬虫和数据库分析类库不错,
  即刻采集了最受欢迎排行榜、发现频道排行榜、问答、评论排行榜、特色排行榜、热门采访等数十大排行榜分类。通过直接获取公共注册账号的公共发言、评论数据,或者分析出不同用户的喜好,满足你想知道某一条微博是否被采集的需求。例如:根据发起发起人、话题类型、话题热度、发帖时间、微博简介等分析微博热度,以及用户的最爱。
  文章采集方面,还有新浪微博采集器这是一款相当好用的采集器,直接下载安装,不要wifi什么都,随用随开,实时采集,采自己想采的数据,
  foobar2000,

使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图) )

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2021-12-26 03:11 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图)
)
  最近在研究使用Python制作各种类型的机器人。今天给大家分享一个自动发布新浪微博的机器人。
  基本思想
  其实实现一个简单的微博机器人并不难。你只需要每天准时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。
  材料
  素材方面,我这里选择的是金山词霸的每日一句英文,我们可以爬取本网站的相关信息,组成我们的微博素材。
  微博接口
  微博为开发者提供开放平台
  当然,在使用这个平台之前,我们仍然需要注册并创建一个应用程序。比如像我一样,创建一个应用程序
  
  然后我们还需要设置一个安全域名(以后发布微博时会用到),在应用信息-&gt;基本信息中设置。
  
  还需要设置应用回调地址,在应用信息-&gt;高级信息中设置。
  
  当然,对于微博API的调用,我们可以使用其他人打包的第三方库,操作起来更加方便。我这里用了一个叫“weibo”的库,直接用pip安装。
  pip 安装微博
  但是我遇到了一个安装问题,错误如下
  Traceback (most recent call last):
File "setup.py", line 15, in
long_description=open(&#39;README.rst&#39;).read(),
UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0xae in position 241: illegal multibyte sequence
  好像是编码问题,我们可以通过修改源代码来规避
  
  long_description=open(&#39;README.rst&#39;, encoding=&#39;utf-8&#39;).read(),
  python setup.py build
python setup.py install
  至此就可以成功安装微博库了
  准备工作和写作思路就是这些,下面我们来看看具体的过程和代码
  自动发布微博
  根据微博库的文档,使用它来操作微博是比较容易的。您只需要在我们创建微博应用时提供App Key和App Secret以及应用回调地址信息即可。简单的调用代码如下
  from weibo import Client
c = Client(&#39;App Key&#39;, &#39;App Secret&#39;, &#39;https://www.luobodazahui.top&#39;, username=&#39;username&#39;, password=&#39;password&#39;)
c.post(&#39;statuses/share&#39;, status=&#39;haha&#39; + 安全域名)
  我们运行代码,如果没有任何反应,我们将可以在该帐户下的微博中看到刚刚发布的微博。
  
  最简单的微博已经发布成功了,那么我们可以发布带图片的微博,我们试试吧
  根据接口status/share的文档,我们可以传入pic参数来上传图片
  
  我们传入 pic 参数并尝试
  f = open(&#39;4.png&#39;, &#39;rb&#39;)
c.post(&#39;statuses/share&#39;, status=&#39;haha&#39; + 安全域名, pic=f)
f.close()
  是的,它可以正常发布带图片的微博
  
  那么现在微博的自动发布就完成了,下面我们来看看如何自动获取微博素材
  微博素材
  对于金山词霸的每日一句,我们可以使用以下API获取每日信息
  可以看到界面返回如下信息
  
  我们可以直接使用requests库来调用这个接口
  import requests
url = &#39;http://open.iciba.com/dsapi/&#39;
res = requests.get(url)
content_e = res.json()[&#39;content&#39;]
content_c = res.json()[&#39;note&#39;]
content = content_e + &#39;\n&#39; + content_c
content_t = res.json()[&#39;picture2&#39;]
  现在我们封装两个函数来完成功能
  def weibo(content, picture):
ff = requests.get(picture).content
c = Client(app_key, app_secret, &#39;https://www.luobodazahui.top&#39;, username=username, password=password)
c.post(&#39;statuses/share&#39;, status=content + &#39;https://www.luobodazahui.com&#39;, pic=ff)
def auto_weibo():
url = &#39;http://open.iciba.com/dsapi/&#39;
res = requests.get(url)
content_e = res.json()[&#39;content&#39;]
content_c = res.json()[&#39;note&#39;]
content = content_e + &#39;\n&#39; + content_c
content_t = res.json()[&#39;picture2&#39;]
weibo(content, content_t)
return &#39;OK&#39;
  现在我们可以创建一个定时任务,每天7点运行脚本。
  0 7 * * * python auto_weibo.py
  最终效果如下
   查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图)
)
  最近在研究使用Python制作各种类型的机器人。今天给大家分享一个自动发布新浪微博的机器人。
  基本思想
  其实实现一个简单的微博机器人并不难。你只需要每天准时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。
  材料
  素材方面,我这里选择的是金山词霸的每日一句英文,我们可以爬取本网站的相关信息,组成我们的微博素材。
  微博接口
  微博为开发者提供开放平台
  当然,在使用这个平台之前,我们仍然需要注册并创建一个应用程序。比如像我一样,创建一个应用程序
  
  然后我们还需要设置一个安全域名(以后发布微博时会用到),在应用信息-&gt;基本信息中设置。
  
  还需要设置应用回调地址,在应用信息-&gt;高级信息中设置。
  
  当然,对于微博API的调用,我们可以使用其他人打包的第三方库,操作起来更加方便。我这里用了一个叫“weibo”的库,直接用pip安装。
  pip 安装微博
  但是我遇到了一个安装问题,错误如下
  Traceback (most recent call last):
File "setup.py", line 15, in
long_description=open(&#39;README.rst&#39;).read(),
UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0xae in position 241: illegal multibyte sequence
  好像是编码问题,我们可以通过修改源代码来规避
  
  long_description=open(&#39;README.rst&#39;, encoding=&#39;utf-8&#39;).read(),
  python setup.py build
python setup.py install
  至此就可以成功安装微博库了
  准备工作和写作思路就是这些,下面我们来看看具体的过程和代码
  自动发布微博
  根据微博库的文档,使用它来操作微博是比较容易的。您只需要在我们创建微博应用时提供App Key和App Secret以及应用回调地址信息即可。简单的调用代码如下
  from weibo import Client
c = Client(&#39;App Key&#39;, &#39;App Secret&#39;, &#39;https://www.luobodazahui.top&#39;, username=&#39;username&#39;, password=&#39;password&#39;)
c.post(&#39;statuses/share&#39;, status=&#39;haha&#39; + 安全域名)
  我们运行代码,如果没有任何反应,我们将可以在该帐户下的微博中看到刚刚发布的微博。
  
  最简单的微博已经发布成功了,那么我们可以发布带图片的微博,我们试试吧
  根据接口status/share的文档,我们可以传入pic参数来上传图片
  
  我们传入 pic 参数并尝试
  f = open(&#39;4.png&#39;, &#39;rb&#39;)
c.post(&#39;statuses/share&#39;, status=&#39;haha&#39; + 安全域名, pic=f)
f.close()
  是的,它可以正常发布带图片的微博
  
  那么现在微博的自动发布就完成了,下面我们来看看如何自动获取微博素材
  微博素材
  对于金山词霸的每日一句,我们可以使用以下API获取每日信息
  可以看到界面返回如下信息
  
  我们可以直接使用requests库来调用这个接口
  import requests
url = &#39;http://open.iciba.com/dsapi/&#39;
res = requests.get(url)
content_e = res.json()[&#39;content&#39;]
content_c = res.json()[&#39;note&#39;]
content = content_e + &#39;\n&#39; + content_c
content_t = res.json()[&#39;picture2&#39;]
  现在我们封装两个函数来完成功能
  def weibo(content, picture):
ff = requests.get(picture).content
c = Client(app_key, app_secret, &#39;https://www.luobodazahui.top&#39;, username=username, password=password)
c.post(&#39;statuses/share&#39;, status=content + &#39;https://www.luobodazahui.com&#39;, pic=ff)
def auto_weibo():
url = &#39;http://open.iciba.com/dsapi/&#39;
res = requests.get(url)
content_e = res.json()[&#39;content&#39;]
content_c = res.json()[&#39;note&#39;]
content = content_e + &#39;\n&#39; + content_c
content_t = res.json()[&#39;picture2&#39;]
weibo(content, content_t)
return &#39;OK&#39;
  现在我们可以创建一个定时任务,每天7点运行脚本。
  0 7 * * * python auto_weibo.py
  最终效果如下
  

使用新浪微博开放平台api同步微博内容至自己网站(微博模拟登录这是本次爬取 )

网站优化优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2021-12-26 00:06 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(微博模拟登录这是本次爬取
)
  微博模拟登录
  这是这次爬取的网址:
  一、请求分析
  找到登录位置,填写用户名和密码登录
  
  查看响应此请求的数据
  
  这是来自响应的数据,保存它
  exectime: 8
nonce: "HW9VSX"
pcid: "gz-4ede4c6269a09f5b7a6490f790b4aa944eec"
pubkey: "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
retcode: 0
rsakv: "1330428213"
servertime: 1568257059
  继续完善登录操作,输入密码,点击登录按钮
  
  经过分析,发现改变的参数是sp、nonce、servetime。servetime 是当前时间戳,我们只需要找到另外两个参数的生成方法即可。对了,su的参数是base64加密生成的
  二、求sp,nonce的加密方式
  这次我不会使用搜索关键字来查找加密位置。
  
  找到调用函数的位置,打个断点,然后登录
  
  经过js代码流程调试和分析,我们终于找到了加密的位置
  
  简单介绍如何调试js代码
  
  找到sp,nonce的位置,通过python代码实现其加密方法
  
  sp是通过rsa加密和加密生成的。rsa的具体用法可以通过百度查到。或者通过sha1加密生成。至于他是怎么得到me.rsaPubkey的,他只是在我们点击登录之前发送了一个请求,该请求的响应数据中收录
了它。如果你测试更多次,你会发现这个值是固定的。所以我们也可以直接使用它而无需请求访问。
  nonce:在没有点击登录之前,它也出现在请求的响应数据中。但是,我们多次点击登录,都没有找到这个请求。nonce 的值每次都不同。所以必须是本地js文件的某个函数生成的,不需要请求服务器去获取。我们在这里找到了 nonce 生成函数
  
  
  import random
import rsa
import hashlib
from binascii import b2a_hex
def get_nonce(n):
result = ""
random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i in range(n):
index = random.randint(0, len(random_str) - 1)
result += random_str[index]
return result
def get_sp_rsa(password, servertime, nonce):
key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
pubkey = rsa.PublicKey(int(key, 16), int("10001", 16))
res = rsa.encrypt(bytes("" + "\t".join([servertime, nonce]) + "\n" + password,encoding="utf-8"), pubkey)
return b2a_hex(res)
def get_sp_sha1(password, servertime, nonce):
res = hashlib.sha1(bytes("" + hashlib.sha1(bytes(hashlib.sha1(bytes(password, encoding="utf-8")).hexdigest(),encoding="utf-8")).hexdigest() + servertime + nonce,encoding="utf-8")).hexdigest()
return res
  三、响应数据
  请求参数分析基本完成,这次输入正确的用户名和密码。响应数据是什么?
  
  打开fiddler,然后退出当前账号,重新登录。fiddler 上会有很多请求。找到需要的请求,查看响应内容
  
  
  
  这样做时,每个响应都将设置 cookie。所以按照上面的流程,识别登录的cookie肯定是可用的。之后,就拿着这个cookie做其他的操作吧。
  最后附上代码
  import requests, random, time, rsa, hashlib, base64, re, json
from binascii import b2a_hex
class WeiBo:
def __init__(self):
self.session = requests.Session()
self.headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
def login(self, account, password):
api = "https://login.sina.com.cn/sso/ ... in.js(v1.4.19)"
nonce = self._get_nonce()
servertime = self._get_now_time()
sp = self._get_sp_rsa(password, servertime, nonce)
su = self._get_su(account)
data = {
"entry": "weibo",
"gateway": "1",
"from": "",
"savestate": "7",
"qrcode_flag": "false",
"useticket": "1",
"pagerefer": "https://login.sina.com.cn/cros ... ot%3B,
"vsnf": "1",
"su": su,
"service": "miniblog",
"servertime": servertime,
"nonce": nonce,
"pwencode": "rsa2",
"rsakv": "1330428213",
"sp": sp,
"sr": "1920*1080",
"encoding": "UTF - 8",
"prelt": "149",
"url": "https://weibo.com/ajaxlogin.ph ... ot%3B,
"returntype": "META",
}
headers = self.headers.copy()
headers.update({
"Host": "login.sina.com.cn",
"Origin": "https://weibo.com",
"Referer": "https://weibo.com/"
})
response = self.session.post(api, headers=headers, data=data, allow_redirects=False)
search_result = self._re_search("location.replace\(\"(.*?)\"", response.text)
redirct_url = search_result and search_result.group(1)
if not redirct_url:
raise Exception("重定向url获取失败")
response = self.session.get(redirct_url, headers=headers.update({
"Referer": "https://login.sina.com.cn/sso/ ... in.js(v1.4.19)"
}), allow_redirects=False)
search_result = self._re_search('"arrURL":(.*?)}', response.text)
redirct_urls = search_result and search_result.group(1)
if not redirct_urls:
raise Exception("重定向url获取失败")
redirct_url_list = json.loads(redirct_urls)
userId = ""
for url in redirct_url_list:
response = self.session.get(url, headers=self.headers)
if url.startswith("https://passport.weibo.com/wbsso/login"):
userId = self._re_search('"uniqueid":"(.*?)"', response.text).group(1)
if not userId:
raise Exception("userId获取失败")
user_details_url = "https://weibo.com/u/{}/home?wvr=5&lf=reg".format(userId)
response = self.session.get(user_details_url, headers={
"Referer": "https://weibo.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
})
if self._re_search(userId, response.text):
print("登录成功")
print(self.session.cookies)
else:
print("登录失败")
def _get_nonce(self):
nonce = ""
random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i in range(5):
index = random.randint(0, len(random_str) - 1)
nonce += random_str[index]
return nonce
def _get_now_time(self):
return str(int(time.time()))
def _get_sp_rsa(self, password, servertime, nonce):
key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
pubkey = rsa.PublicKey(int(key, 16), int("10001", 16))
res = rsa.encrypt(bytes("" + "\t".join([servertime, nonce]) + "\n" + password, encoding="utf-8"), pubkey)
return b2a_hex(res)
def _get_sp_sha1(self, password, servertime, nonce):
res = hashlib.sha1(bytes("" + hashlib.sha1(bytes(hashlib.sha1(bytes(password, encoding="utf-8")).hexdigest(),
encoding="utf-8")).hexdigest() + servertime + nonce,
encoding="utf-8")).hexdigest()
return res
def _get_su(self, account):
return str(base64.b64encode(bytes(account, encoding="utf-8")), encoding="utf-8")
def _re_search(self, pattern, html):
return re.search(pattern, html, re.S)
def test(self):
self.login("18716758777", "123456")
if __name__ == '__main__':
wb = WeiBo()
wb.test() 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(微博模拟登录这是本次爬取
)
  微博模拟登录
  这是这次爬取的网址:
  一、请求分析
  找到登录位置,填写用户名和密码登录
  
  查看响应此请求的数据
  
  这是来自响应的数据,保存它
  exectime: 8
nonce: "HW9VSX"
pcid: "gz-4ede4c6269a09f5b7a6490f790b4aa944eec"
pubkey: "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
retcode: 0
rsakv: "1330428213"
servertime: 1568257059
  继续完善登录操作,输入密码,点击登录按钮
  
  经过分析,发现改变的参数是sp、nonce、servetime。servetime 是当前时间戳,我们只需要找到另外两个参数的生成方法即可。对了,su的参数是base64加密生成的
  二、求sp,nonce的加密方式
  这次我不会使用搜索关键字来查找加密位置。
  
  找到调用函数的位置,打个断点,然后登录
  
  经过js代码流程调试和分析,我们终于找到了加密的位置
  
  简单介绍如何调试js代码
  
  找到sp,nonce的位置,通过python代码实现其加密方法
  
  sp是通过rsa加密和加密生成的。rsa的具体用法可以通过百度查到。或者通过sha1加密生成。至于他是怎么得到me.rsaPubkey的,他只是在我们点击登录之前发送了一个请求,该请求的响应数据中收录
了它。如果你测试更多次,你会发现这个值是固定的。所以我们也可以直接使用它而无需请求访问。
  nonce:在没有点击登录之前,它也出现在请求的响应数据中。但是,我们多次点击登录,都没有找到这个请求。nonce 的值每次都不同。所以必须是本地js文件的某个函数生成的,不需要请求服务器去获取。我们在这里找到了 nonce 生成函数
  
  
  import random
import rsa
import hashlib
from binascii import b2a_hex
def get_nonce(n):
result = ""
random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i in range(n):
index = random.randint(0, len(random_str) - 1)
result += random_str[index]
return result
def get_sp_rsa(password, servertime, nonce):
key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
pubkey = rsa.PublicKey(int(key, 16), int("10001", 16))
res = rsa.encrypt(bytes("" + "\t".join([servertime, nonce]) + "\n" + password,encoding="utf-8"), pubkey)
return b2a_hex(res)
def get_sp_sha1(password, servertime, nonce):
res = hashlib.sha1(bytes("" + hashlib.sha1(bytes(hashlib.sha1(bytes(password, encoding="utf-8")).hexdigest(),encoding="utf-8")).hexdigest() + servertime + nonce,encoding="utf-8")).hexdigest()
return res
  三、响应数据
  请求参数分析基本完成,这次输入正确的用户名和密码。响应数据是什么?
  
  打开fiddler,然后退出当前账号,重新登录。fiddler 上会有很多请求。找到需要的请求,查看响应内容
  
  
  
  这样做时,每个响应都将设置 cookie。所以按照上面的流程,识别登录的cookie肯定是可用的。之后,就拿着这个cookie做其他的操作吧。
  最后附上代码
  import requests, random, time, rsa, hashlib, base64, re, json
from binascii import b2a_hex
class WeiBo:
def __init__(self):
self.session = requests.Session()
self.headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
def login(self, account, password):
api = "https://login.sina.com.cn/sso/ ... in.js(v1.4.19)"
nonce = self._get_nonce()
servertime = self._get_now_time()
sp = self._get_sp_rsa(password, servertime, nonce)
su = self._get_su(account)
data = {
"entry": "weibo",
"gateway": "1",
"from": "",
"savestate": "7",
"qrcode_flag": "false",
"useticket": "1",
"pagerefer": "https://login.sina.com.cn/cros ... ot%3B,
"vsnf": "1",
"su": su,
"service": "miniblog",
"servertime": servertime,
"nonce": nonce,
"pwencode": "rsa2",
"rsakv": "1330428213",
"sp": sp,
"sr": "1920*1080",
"encoding": "UTF - 8",
"prelt": "149",
"url": "https://weibo.com/ajaxlogin.ph ... ot%3B,
"returntype": "META",
}
headers = self.headers.copy()
headers.update({
"Host": "login.sina.com.cn",
"Origin": "https://weibo.com",
"Referer": "https://weibo.com/"
})
response = self.session.post(api, headers=headers, data=data, allow_redirects=False)
search_result = self._re_search("location.replace\(\"(.*?)\"", response.text)
redirct_url = search_result and search_result.group(1)
if not redirct_url:
raise Exception("重定向url获取失败")
response = self.session.get(redirct_url, headers=headers.update({
"Referer": "https://login.sina.com.cn/sso/ ... in.js(v1.4.19)"
}), allow_redirects=False)
search_result = self._re_search('"arrURL":(.*?)}', response.text)
redirct_urls = search_result and search_result.group(1)
if not redirct_urls:
raise Exception("重定向url获取失败")
redirct_url_list = json.loads(redirct_urls)
userId = ""
for url in redirct_url_list:
response = self.session.get(url, headers=self.headers)
if url.startswith("https://passport.weibo.com/wbsso/login";):
userId = self._re_search('"uniqueid":"(.*?)"', response.text).group(1)
if not userId:
raise Exception("userId获取失败")
user_details_url = "https://weibo.com/u/{}/home?wvr=5&lf=reg".format(userId)
response = self.session.get(user_details_url, headers={
"Referer": "https://weibo.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
})
if self._re_search(userId, response.text):
print("登录成功")
print(self.session.cookies)
else:
print("登录失败")
def _get_nonce(self):
nonce = ""
random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i in range(5):
index = random.randint(0, len(random_str) - 1)
nonce += random_str[index]
return nonce
def _get_now_time(self):
return str(int(time.time()))
def _get_sp_rsa(self, password, servertime, nonce):
key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
pubkey = rsa.PublicKey(int(key, 16), int("10001", 16))
res = rsa.encrypt(bytes("" + "\t".join([servertime, nonce]) + "\n" + password, encoding="utf-8"), pubkey)
return b2a_hex(res)
def _get_sp_sha1(self, password, servertime, nonce):
res = hashlib.sha1(bytes("" + hashlib.sha1(bytes(hashlib.sha1(bytes(password, encoding="utf-8")).hexdigest(),
encoding="utf-8")).hexdigest() + servertime + nonce,
encoding="utf-8")).hexdigest()
return res
def _get_su(self, account):
return str(base64.b64encode(bytes(account, encoding="utf-8")), encoding="utf-8")
def _re_search(self, pattern, html):
return re.search(pattern, html, re.S)
def test(self):
self.login("18716758777", "123456")
if __name__ == '__main__':
wb = WeiBo()
wb.test()

使用新浪微博开放平台api同步微博内容至自己网站( 如何自动将的Twitter信息同步到国内的新浪微博(图))

网站优化优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2021-12-25 13:28 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(
如何自动将的Twitter信息同步到国内的新浪微博(图))
  
  如何将推特信息自动同步到新浪微博、开心网、人人网等国内SNS网站。有大约一小时的时差。这个时差是由 TwitterFeed 引起的。同时,这种方法的设置比较繁琐,需要多次翻墙。
  于是,我开始尝试一种新的同步方式,开发了一个Python程序,可以定时自动读取和同步推特信息,简化同步过程,缩短同步时间,实现基本的实时同步功能。原同步流程图为:推特-&gt;appspot-&gt;twitterfeed-&gt;ping.fm-&gt;customurl-&gt;火兔-&gt;新浪微博,新的同步流程变为:twitter-&gt;appspot-&gt;火兔-&gt;新浪微博,步骤大大简化了,只需在GAE上设置一个定时执行的定时任务即可。
  因为 GAE 支持 Cron Job 调度任务,所以我们的 Python 程序可以每分钟自动调用一次。打电话时,首先从推特上抓取用户的最新消息。抓取成功后,消息会同步到听火。然后分发到新浪微博、开心网等,如果设置为每分钟执行一次,同步时差只有一分钟左右,基本实现了Twitter信息实时同步到SNS等网站的功能新浪微博。
  我在GAE上调试了程序Python程序,不流畅。我按照官方说明配置了cron.yaml文件,但是更新了Twitter.py后,cron作业计划任务还是不行,后台也看不到相关的cron。工作任务。
  经过一番研究,终于解决了GAE中Python的Cron Job定时任务的问题。原因很简单,因为我的“Google App Engine SDK for Python”是很久以前安装的,当时GAE还不支持定时任务。无法更新 cron.yaml 文件。重新下载最新版本的“Google App Engine SDK for Python”并安装后,Cron Job定时任务更新成功。
  然而,新的问题又来了。我发现当应用程序调用Twitter API 时,失败率非常高。在几乎一半的情况下,它会提示“超出速率限制。客户端每小时不能发出超过 150 个请求”。。” 这让我怀疑是不是GAE的外部IP很小,有很多第三方程序在GAE上调用Twitter API,导致每小时调用超过150次。不然我自己的调用肯定不会有这么高的频率,可能是因为推特没有把GAE的IP设置为白名单。如果有一天推特不限制GAE的IP,应该没有问题。
  安装说明:
  下载,用TortoiseSVN查看SVN地址,然后编辑app.yaml,改成你的appspot应用名,然后修改twitter.py文件最后一行改你的推特用户名,嘟嘟火兔用户名和密码分别填写。cron.yaml文件中收录
了定时任务设置,然后就可以按照本文的方法发布,执行appcfg.py更新目录名,使用Gmail账号和密码发布即可。
  发布后,GAE 可以定期执行 twitter.py 程序。由于定时执行最小可以设置为1分钟,所以同步速度非常快,基本可以达到实时自动同步的效果。
  
  () () 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(
如何自动将的Twitter信息同步到国内的新浪微博(图))
  
  如何将推特信息自动同步到新浪微博、开心网、人人网等国内SNS网站。有大约一小时的时差。这个时差是由 TwitterFeed 引起的。同时,这种方法的设置比较繁琐,需要多次翻墙。
  于是,我开始尝试一种新的同步方式,开发了一个Python程序,可以定时自动读取和同步推特信息,简化同步过程,缩短同步时间,实现基本的实时同步功能。原同步流程图为:推特-&gt;appspot-&gt;twitterfeed-&gt;ping.fm-&gt;customurl-&gt;火兔-&gt;新浪微博,新的同步流程变为:twitter-&gt;appspot-&gt;火兔-&gt;新浪微博,步骤大大简化了,只需在GAE上设置一个定时执行的定时任务即可。
  因为 GAE 支持 Cron Job 调度任务,所以我们的 Python 程序可以每分钟自动调用一次。打电话时,首先从推特上抓取用户的最新消息。抓取成功后,消息会同步到听火。然后分发到新浪微博、开心网等,如果设置为每分钟执行一次,同步时差只有一分钟左右,基本实现了Twitter信息实时同步到SNS等网站的功能新浪微博。
  我在GAE上调试了程序Python程序,不流畅。我按照官方说明配置了cron.yaml文件,但是更新了Twitter.py后,cron作业计划任务还是不行,后台也看不到相关的cron。工作任务。
  经过一番研究,终于解决了GAE中Python的Cron Job定时任务的问题。原因很简单,因为我的“Google App Engine SDK for Python”是很久以前安装的,当时GAE还不支持定时任务。无法更新 cron.yaml 文件。重新下载最新版本的“Google App Engine SDK for Python”并安装后,Cron Job定时任务更新成功。
  然而,新的问题又来了。我发现当应用程序调用Twitter API 时,失败率非常高。在几乎一半的情况下,它会提示“超出速率限制。客户端每小时不能发出超过 150 个请求”。。” 这让我怀疑是不是GAE的外部IP很小,有很多第三方程序在GAE上调用Twitter API,导致每小时调用超过150次。不然我自己的调用肯定不会有这么高的频率,可能是因为推特没有把GAE的IP设置为白名单。如果有一天推特不限制GAE的IP,应该没有问题。
  安装说明:
  下载,用TortoiseSVN查看SVN地址,然后编辑app.yaml,改成你的appspot应用名,然后修改twitter.py文件最后一行改你的推特用户名,嘟嘟火兔用户名和密码分别填写。cron.yaml文件中收录
了定时任务设置,然后就可以按照本文的方法发布,执行appcfg.py更新目录名,使用Gmail账号和密码发布即可。
  发布后,GAE 可以定期执行 twitter.py 程序。由于定时执行最小可以设置为1分钟,所以同步速度非常快,基本可以达到实时自动同步的效果。
  
  () ()

使用新浪微博开放平台api同步微博内容至自己网站(写个一条怎么火起来?一条B/S架构分析)

网站优化优采云 发表了文章 • 0 个评论 • 38 次浏览 • 2021-12-25 04:07 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(写个一条怎么火起来?一条B/S架构分析)
  还在想着写个例子来实际使用新浪的api。结果,实验室的考勤机着火了。8日下午盯着微博,看到那条微博的转发量从一开始是一点点增长,然后是后面快速增长。所以我想写点什么来分析微博是如何流行起来的。
  因为擅长写B/S项目,所以先确定这个分析工具是B/S结构,然后考虑应该提供什么功能。
  首先想到的是粉丝的增长。折线图可用于显示显示。横轴是时间,纵轴是风扇数量。但是我去新浪找了一个可以实现这个功能的api。新浪提供的最新api是friends/followers(获取用户的粉丝列表),但是返回值不包括成为粉丝的时间。我现在能想象的数据库表的设计大概就是一个用户的表,然后这个表里面有一列follower,里面的值就是用户的id。在这种情况下,真的没有地方可以存放成为粉丝的时间。(我不知道实际情况是否如此)。因此,此功能暂时不可用。
  想到的第二件事是粉丝的分布。条形图可用于显示。横轴为省,纵轴为风扇数。新浪提供的api(friendships/followers:获取用户的粉丝列表)可以获取粉丝所在的省份(.getProvince(),返回一个数字),然后根据api(common/get省份:获取列表省),就可以得到号码对应的省的名称,所以在前台得到你要找的微博的名称,然后用ext来绘制地图。效果如下:
  
  (上图中统计时间为2012-3-12 9:20 PM,总粉丝数4770)
  开发笔记:
  1. 认证相关:使用OAuth认证。有一个登录页面 login.jsp 和一个回调页面 index.jsp。在login.jsp中打开新浪的认证页面,认证成功后跳转到回调页面索引。jsp(需要同时在应用应用场所和项目中配置回调页面,见上一篇博文)。这时候index.jsp的地址栏中有一个code值(下一步使用),使用request.getParameter("code")获取这个值,然后执行oauth.getAccessTokenByCode(code).getAccessToken () 获取最重要的accessToken。有了这个值,认证就被认为是成功的。这个值基本用于后续调用api,所以存储在session中(session.setAttribute("accessToken", 访问令牌))。至此,认证成功。但是有一个问题,刷新index.jsp的时候,会报错“error:invalid_grant error_code:21325/oauth2/access_token”,所以改一下,开头先判断session.getAttribute("accessToken")是否可用index.jsp 的值,如果没有认证,如果没有操作。这个改动后报错,报错是空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。
  2.friendships/followers 的参数是screen_name(用户昵称)、count(单页返回的记录条数,默认50条,最大20条0)、cursor(那个返回结果,默认为0),表示一次只能返回200条记录,所以需要执行多次,每次执行后可以得到此时光标的位置根据users.getNextCursor(),得到这个值,然后作为下一次执行的参数cursor的值,我用的是do-while方法,循环的条件是users.getNextCursor( ) 不为 0(因为当最后一次执行完成时,users.getNextCursor()=0)。
  3. 如何存储一个省的人数:用一个大小为100的数组a来存储一个省的人数,初始值为0,省代码为数组编号(例如,北京的省代码是11,粉丝的省是11点,a[11]++)。
  4. 按人数从大到小排序:设置两个参数(int big=0 和 int p=-1) 遍历数组一次,最大的用来存储最大值找到了,p用来存放对应的省份代码,使用do-while循环,循环条件p!=-1,时间复杂度为100*n(人数不为0的省份) .
  5. 省码转对应省的方式:common/get Province可以得到省列表,这个api的参数是country(国家码),我一开始用的是086,结果是都是空的。,然后再根据另一个接口common/get_country(获取国家列表)才发现中国的代码应该是001(呃...)。在新浪提供的例子中,我没有找到获取省份列表的接口,所以我模仿写了一个,返回值是JSONArray的格式,然后使用json.getString(index)获取索引组,然后字符串(例如:{"001011","Beijing"})处理并获取与省号对应的省名。为了减少接口调用次数,
  存在的问题:
  1. 更改用户昵称点击查询,然后在原图下方生成一张图片。最好让原图消失,然后在这个位置重新生成新图。这个应该是前台代码有问题。ext应该比较熟悉和熟悉。
  2.friendships/followers 最多返回5000条记录,所以如果follower超过5000,只能分析最近5000follower的分布。(马上就要破五千了啊啊啊)
  3. 粉丝总数应显示在图片或网页上
  4.现在速度很慢。4770粉丝号用了20多秒才放出图片。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(写个一条怎么火起来?一条B/S架构分析)
  还在想着写个例子来实际使用新浪的api。结果,实验室的考勤机着火了。8日下午盯着微博,看到那条微博的转发量从一开始是一点点增长,然后是后面快速增长。所以我想写点什么来分析微博是如何流行起来的。
  因为擅长写B/S项目,所以先确定这个分析工具是B/S结构,然后考虑应该提供什么功能。
  首先想到的是粉丝的增长。折线图可用于显示显示。横轴是时间,纵轴是风扇数量。但是我去新浪找了一个可以实现这个功能的api。新浪提供的最新api是friends/followers(获取用户的粉丝列表),但是返回值不包括成为粉丝的时间。我现在能想象的数据库表的设计大概就是一个用户的表,然后这个表里面有一列follower,里面的值就是用户的id。在这种情况下,真的没有地方可以存放成为粉丝的时间。(我不知道实际情况是否如此)。因此,此功能暂时不可用。
  想到的第二件事是粉丝的分布。条形图可用于显示。横轴为省,纵轴为风扇数。新浪提供的api(friendships/followers:获取用户的粉丝列表)可以获取粉丝所在的省份(.getProvince(),返回一个数字),然后根据api(common/get省份:获取列表省),就可以得到号码对应的省的名称,所以在前台得到你要找的微博的名称,然后用ext来绘制地图。效果如下:
  
  (上图中统计时间为2012-3-12 9:20 PM,总粉丝数4770)
  开发笔记:
  1. 认证相关:使用OAuth认证。有一个登录页面 login.jsp 和一个回调页面 index.jsp。在login.jsp中打开新浪的认证页面,认证成功后跳转到回调页面索引。jsp(需要同时在应用应用场所和项目中配置回调页面,见上一篇博文)。这时候index.jsp的地址栏中有一个code值(下一步使用),使用request.getParameter("code")获取这个值,然后执行oauth.getAccessTokenByCode(code).getAccessToken () 获取最重要的accessToken。有了这个值,认证就被认为是成功的。这个值基本用于后续调用api,所以存储在session中(session.setAttribute("accessToken", 访问令牌))。至此,认证成功。但是有一个问题,刷新index.jsp的时候,会报错“error:invalid_grant error_code:21325/oauth2/access_token”,所以改一下,开头先判断session.getAttribute("accessToken")是否可用index.jsp 的值,如果没有认证,如果没有操作。这个改动后报错,报错是空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。
  2.friendships/followers 的参数是screen_name(用户昵称)、count(单页返回的记录条数,默认50条,最大20条0)、cursor(那个返回结果,默认为0),表示一次只能返回200条记录,所以需要执行多次,每次执行后可以得到此时光标的位置根据users.getNextCursor(),得到这个值,然后作为下一次执行的参数cursor的值,我用的是do-while方法,循环的条件是users.getNextCursor( ) 不为 0(因为当最后一次执行完成时,users.getNextCursor()=0)。
  3. 如何存储一个省的人数:用一个大小为100的数组a来存储一个省的人数,初始值为0,省代码为数组编号(例如,北京的省代码是11,粉丝的省是11点,a[11]++)。
  4. 按人数从大到小排序:设置两个参数(int big=0 和 int p=-1) 遍历数组一次,最大的用来存储最大值找到了,p用来存放对应的省份代码,使用do-while循环,循环条件p!=-1,时间复杂度为100*n(人数不为0的省份) .
  5. 省码转对应省的方式:common/get Province可以得到省列表,这个api的参数是country(国家码),我一开始用的是086,结果是都是空的。,然后再根据另一个接口common/get_country(获取国家列表)才发现中国的代码应该是001(呃...)。在新浪提供的例子中,我没有找到获取省份列表的接口,所以我模仿写了一个,返回值是JSONArray的格式,然后使用json.getString(index)获取索引组,然后字符串(例如:{"001011","Beijing"})处理并获取与省号对应的省名。为了减少接口调用次数,
  存在的问题:
  1. 更改用户昵称点击查询,然后在原图下方生成一张图片。最好让原图消失,然后在这个位置重新生成新图。这个应该是前台代码有问题。ext应该比较熟悉和熟悉。
  2.friendships/followers 最多返回5000条记录,所以如果follower超过5000,只能分析最近5000follower的分布。(马上就要破五千了啊啊啊)
  3. 粉丝总数应显示在图片或网页上
  4.现在速度很慢。4770粉丝号用了20多秒才放出图片。

使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台APIforWinRT:新浪,人人,街旁等 )

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2021-12-23 13:24 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台APIforWinRT:新浪,人人,街旁等
)
  【前言】
  现在各大网站都推出了自己的Web Api,如:新浪、腾讯、人人网、记边等,这些Web API大多遵循REST架构风格,通过json格式的数据进行交互。
  网站 描述接口时也有示例json数据。我们知道在开发静态语言客户端的时候,因为你没有这些实体的定义,所以需要对这些代码逐行进行编码。
  所以@韦恩NBA 和我(@原数据)在 网站 上使用这些示例 json 开发了这个框架,以自动生成这些定义(实体类)以简化开发。它包括:t4、RestApiCore、
  OAuthLib、MVVMCommon。项目地址:上网查了一下,新浪没有提供winRT下的SDK,所以有如下子项目。
  【新浪微博WinRT开放平台SDK】
  WinRT新浪微博开放平台API是基于新浪微博开放平台第二版API接口封装的Windows 8平台软件开发包(Xaml应用)。
  该SDK帮助.Net平台开发者在Windows 8移动平台上快速轻松地开发微博相关应用。
  下载 SDK:
  【特征】
  1. 内置新浪授权页面授权流程
  2. 异步编程框架,支持 async/await 关键字(无回调回调)
  3. 支持新浪微博新版API v2.0
  
  所有API的提示都和网站上的一样,方便用户快速上手。
  
  登录示例代码:
  public class LoginViewModel : SinaWeibo_Win8AppStore.Common.BindableBase
{
private const string AppKey = "{your key}";
private const string AppSecret = "{your secret}";
private const string Callback = "{your callbackURL}";
public async Task LoginAsync()
{
var weibo = new SinaWeiboClientV2.WeiboClientV2();
weibo.Initialize(AppKey, AppSecret, Callback);
var json = Windows.Storage.ApplicationData.Current.LocalSettings.Values["AccessToken"] as string;
if (!string.IsNullOrEmpty(json))
{
weibo.AccessToken = await JsonConvert.DeserializeObjectAsync(json);
}

if (weibo.AccessToken == null)
{
// 认证
await weibo.AuthenticateAsync();
}
// 授权
await weibo.AuthorizeAccessAsync(System.Threading.CancellationToken.None);
Windows.Storage.ApplicationData.Current.LocalSettings.Values["AccessToken"] =
await JsonConvert.SerializeObjectAsync(weibo.CurrentAuthToken.ContextData["AccessToken"]);
return weibo;
}
}
  使用 WinRT 的 WebAuthenticationBroker 进行应用程序授权。
  (下载示例的孩子,不要忘记在你的应用中添加一个测试账号,否则临时应用的授权将不会通过)
  
  发微博示例代码:
  var request = new SinaWeiboClientV2.StatusesUpdate.Request { Status = this.InputArea.Text };
var response = await Weibo.ExecuteStatusesUpdateAsync(request);
  上传图片的示例代码:
  var fileInfo = new RestAPICore.FileUploadInfo();
fileInfo.LocalPath = ImageFile.Name;
fileInfo.StreamFactory = GetImageFile(ImageFile);
var request = new SinaWeiboClientV2.StatusesUpload.Request
{
Status = this.InputArea.Text,
Pic = fileInfo
};
var response = await Weibo.ExecuteStatusesUploadAsync(request);
  private async Task GetImageFile(StorageFile file)
{
    var s = await file.OpenAsync(FileAccessMode.Read);
    return s.AsStream();
}
  阅读以下最新微博的示例代码:
   var response = await Weibo.ExecuteStatusesFriendsTimelineAsync(request);
if (string.IsNullOrEmpty(_maxId))
{
foreach (var item in response.Value.Statuses)
{
_statusFriendsTimeline.Add(item);
}
}
  附上,如何设置测试账号:
   查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台APIforWinRT:新浪,人人,街旁等
)
  【前言】
  现在各大网站都推出了自己的Web Api,如:新浪、腾讯、人人网、记边等,这些Web API大多遵循REST架构风格,通过json格式的数据进行交互。
  网站 描述接口时也有示例json数据。我们知道在开发静态语言客户端的时候,因为你没有这些实体的定义,所以需要对这些代码逐行进行编码。
  所以@韦恩NBA 和我(@原数据)在 网站 上使用这些示例 json 开发了这个框架,以自动生成这些定义(实体类)以简化开发。它包括:t4、RestApiCore、
  OAuthLib、MVVMCommon。项目地址:上网查了一下,新浪没有提供winRT下的SDK,所以有如下子项目。
  【新浪微博WinRT开放平台SDK】
  WinRT新浪微博开放平台API是基于新浪微博开放平台第二版API接口封装的Windows 8平台软件开发包(Xaml应用)。
  该SDK帮助.Net平台开发者在Windows 8移动平台上快速轻松地开发微博相关应用。
  下载 SDK:
  【特征】
  1. 内置新浪授权页面授权流程
  2. 异步编程框架,支持 async/await 关键字(无回调回调)
  3. 支持新浪微博新版API v2.0
  
  所有API的提示都和网站上的一样,方便用户快速上手。
  
  登录示例代码:
  public class LoginViewModel : SinaWeibo_Win8AppStore.Common.BindableBase
{
private const string AppKey = "{your key}";
private const string AppSecret = "{your secret}";
private const string Callback = "{your callbackURL}";
public async Task LoginAsync()
{
var weibo = new SinaWeiboClientV2.WeiboClientV2();
weibo.Initialize(AppKey, AppSecret, Callback);
var json = Windows.Storage.ApplicationData.Current.LocalSettings.Values["AccessToken"] as string;
if (!string.IsNullOrEmpty(json))
{
weibo.AccessToken = await JsonConvert.DeserializeObjectAsync(json);
}

if (weibo.AccessToken == null)
{
// 认证
await weibo.AuthenticateAsync();
}
// 授权
await weibo.AuthorizeAccessAsync(System.Threading.CancellationToken.None);
Windows.Storage.ApplicationData.Current.LocalSettings.Values["AccessToken"] =
await JsonConvert.SerializeObjectAsync(weibo.CurrentAuthToken.ContextData["AccessToken"]);
return weibo;
}
}
  使用 WinRT 的 WebAuthenticationBroker 进行应用程序授权。
  (下载示例的孩子,不要忘记在你的应用中添加一个测试账号,否则临时应用的授权将不会通过)
  
  发微博示例代码:
  var request = new SinaWeiboClientV2.StatusesUpdate.Request { Status = this.InputArea.Text };
var response = await Weibo.ExecuteStatusesUpdateAsync(request);
  上传图片的示例代码:
  var fileInfo = new RestAPICore.FileUploadInfo();
fileInfo.LocalPath = ImageFile.Name;
fileInfo.StreamFactory = GetImageFile(ImageFile);
var request = new SinaWeiboClientV2.StatusesUpload.Request
{
Status = this.InputArea.Text,
Pic = fileInfo
};
var response = await Weibo.ExecuteStatusesUploadAsync(request);
  private async Task GetImageFile(StorageFile file)
{
    var s = await file.OpenAsync(FileAccessMode.Read);
    return s.AsStream();
}
  阅读以下最新微博的示例代码:
   var response = await Weibo.ExecuteStatusesFriendsTimelineAsync(request);
if (string.IsNullOrEmpty(_maxId))
{
foreach (var item in response.Value.Statuses)
{
_statusFriendsTimeline.Add(item);
}
}
  附上,如何设置测试账号:
  

使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图))

网站优化优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2021-12-21 21:07 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图))
  最近在研究使用Python制作各种类型的机器人。今天给大家分享一个自动发布新浪微博的机器人。
  基本思想
  其实实现一个简单的自动发布微博的微博机器人并不难。你只需要每天准时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。
  材料
  材料方面,我选择了金山词霸的每日一句。我们可以抓取这个网站的相关信息来组成我们的微博素材。
  微博接口
  微博为开发者提供开放平台
  当然,在使用这个平台之前,我们仍然需要注册并创建一个应用程序。比如像我一样,创建一个应用程序
  
  然后我们还需要设置一个安全域名(以后发布微博时会用到),在应用信息-&gt;基本信息中设置。
  
  还需要设置应用回调地址,在应用信息-&gt;高级信息中设置。
  
  当然,对于微博API的调用,我们可以使用别人打包的第三方库,操作起来更方便。这里我使用了一个名为“weibo”的库,直接使用pip安装。
  pip 安装微博
  但是我遇到了一个安装问题,错误如下
  Traceback (most recent call last):
File "setup.py", line 15, in
long_description=open('README.rst').read(),
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 241: illegal multibyte sequence
  好像是编码问题,我们可以通过修改源代码来规避
  
  long_description=open('README.rst', encoding='utf-8').read(),
  python setup.py build
python setup.py install
  至此就可以成功安装微博库了
  准备工作和写作思路就是这些,下面我们来看看具体的过程和代码
  Python自动发布微博
  根据微博库的文档,操作微博还是比较好用的。您只需要在我们创建微博应用时提供App Key和App Secret以及应用回调地址信息即可。简单的调用代码如下
  from weibo import Client
c = Client('App Key', 'App Secret', 'https://www.luobodazahui.top', username='username', password='password')
c.post('statuses/share', status='haha' + 安全域名)
  我们运行代码,如果没有任何反应,我们将可以在该帐户下的微博中看到刚刚发布的微博。
  
  最简单的微博已经发布成功了,那么我们可以发布带图片的微博,我们试试吧
  根据接口status/share的文档,我们可以传入pic参数来上传图片
  
  我们传入 pic 参数并尝试
  f = open('4.png', 'rb')
c.post('statuses/share', status='haha' + 安全域名, pic=f)
f.close()
  是的,它可以正常发布带图片的微博
  
  那么现在微博的自动发布就完成了,下面我们来看看如何自动获取微博素材
  微博素材
  对于金山词霸的每日一句,我们可以使用以下API获取每日信息
  可以看到界面返回如下信息
  
  我们可以直接使用requests库来调用这个接口
  import requests
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
content = content_e + 'n' + content_c
content_t = res.json()['picture2']
  现在我们封装两个函数来完成功能
  def weibo(content, picture):
ff = requests.get(picture).content
c = Client(app_key, app_secret, 'https://www.luobodazahui.top', username=username, password=password)
c.post('statuses/share', status=content + 'https://www.luobodazahui.com', pic=ff)
def auto_weibo():
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
content = content_e + 'n' + content_c
content_t = res.json()['picture2']
weibo(content, content_t)
return 'OK'
  现在我们可以创建一个定时任务,每天7点运行脚本。
  0 7 * * * python auto_weibo.py
  最终效果如下
  
  免责声明:本文来自汇火官方原创,如转载请注明出处: 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(一个自动发布新浪微博的机器人(图)分享(组图))
  最近在研究使用Python制作各种类型的机器人。今天给大家分享一个自动发布新浪微博的机器人。
  基本思想
  其实实现一个简单的自动发布微博的微博机器人并不难。你只需要每天准时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。
  材料
  材料方面,我选择了金山词霸的每日一句。我们可以抓取这个网站的相关信息来组成我们的微博素材。
  微博接口
  微博为开发者提供开放平台
  当然,在使用这个平台之前,我们仍然需要注册并创建一个应用程序。比如像我一样,创建一个应用程序
  
  然后我们还需要设置一个安全域名(以后发布微博时会用到),在应用信息-&gt;基本信息中设置。
  
  还需要设置应用回调地址,在应用信息-&gt;高级信息中设置。
  
  当然,对于微博API的调用,我们可以使用别人打包的第三方库,操作起来更方便。这里我使用了一个名为“weibo”的库,直接使用pip安装。
  pip 安装微博
  但是我遇到了一个安装问题,错误如下
  Traceback (most recent call last):
File "setup.py", line 15, in
long_description=open('README.rst').read(),
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 241: illegal multibyte sequence
  好像是编码问题,我们可以通过修改源代码来规避
  
  long_description=open('README.rst', encoding='utf-8').read(),
  python setup.py build
python setup.py install
  至此就可以成功安装微博库了
  准备工作和写作思路就是这些,下面我们来看看具体的过程和代码
  Python自动发布微博
  根据微博库的文档,操作微博还是比较好用的。您只需要在我们创建微博应用时提供App Key和App Secret以及应用回调地址信息即可。简单的调用代码如下
  from weibo import Client
c = Client('App Key', 'App Secret', 'https://www.luobodazahui.top', username='username', password='password')
c.post('statuses/share', status='haha' + 安全域名)
  我们运行代码,如果没有任何反应,我们将可以在该帐户下的微博中看到刚刚发布的微博。
  
  最简单的微博已经发布成功了,那么我们可以发布带图片的微博,我们试试吧
  根据接口status/share的文档,我们可以传入pic参数来上传图片
  
  我们传入 pic 参数并尝试
  f = open('4.png', 'rb')
c.post('statuses/share', status='haha' + 安全域名, pic=f)
f.close()
  是的,它可以正常发布带图片的微博
  
  那么现在微博的自动发布就完成了,下面我们来看看如何自动获取微博素材
  微博素材
  对于金山词霸的每日一句,我们可以使用以下API获取每日信息
  可以看到界面返回如下信息
  
  我们可以直接使用requests库来调用这个接口
  import requests
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
content = content_e + 'n' + content_c
content_t = res.json()['picture2']
  现在我们封装两个函数来完成功能
  def weibo(content, picture):
ff = requests.get(picture).content
c = Client(app_key, app_secret, 'https://www.luobodazahui.top', username=username, password=password)
c.post('statuses/share', status=content + 'https://www.luobodazahui.com', pic=ff)
def auto_weibo():
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
content = content_e + 'n' + content_c
content_t = res.json()['picture2']
weibo(content, content_t)
return 'OK'
  现在我们可以创建一个定时任务,每天7点运行脚本。
  0 7 * * * python auto_weibo.py
  最终效果如下
  
  免责声明:本文来自汇火官方原创,如转载请注明出处:

使用新浪微博开放平台api同步微博内容至自己网站(关于新浪微博爬虫的一些事儿,你知道吗? )

网站优化优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2021-12-21 21:05 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(关于新浪微博爬虫的一些事儿,你知道吗?
)
  最近和孙承杰老师在NLP实验室做了一些事情。我打算结合新浪微博的用户数据,基于文章的“多标签分类”算法,看看实验的效果。于是找了一些关于新浪微博爬虫的资料,整理如下:
  (一)模拟登录新浪微博(Python)(使用python程序获取cookie登录)
  更新:如果只是写个小爬虫,访问需要登录的页面,使用填cookies的方法,简单粗暴有效。有关详细信息,请参阅:
  模拟登录有时需要了解js加密(散列)方法、输入验证方法等,同一段代码很难一直有效。
  文本:
  PC登录新浪微博时,用户名和密码在客户端用js进行了预加密,POST前会GET一组参数,也是POST_DATA的一部分。这样就不能用通常的简单方法来模拟POST登录(如人人网)。
  由于部分要使用的微博数据不方便通过API获取,所以还是要自己写一个小爬虫,模拟登录是必不可少的。想了想这件事,最后还是登录成功了。
  1、在提交POST请求之前,需要GET获取两个参数。
  地址为:(v1.3.18)
  得到的数据中收录了“servertime”和“nonce”的值,是随机的,其他的值好像没什么用。
  2、通过httpfox观察POST数据,参数比较复杂,其中“su”为加密用户名,“sp”为加密密码。“servertime”和“nonce”是从上一步获得的。其他参数不变。
  username 经过了BASE64 计算: username = base64.encodestring( urllib.quote(username) )[:-1];
password 经过了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值来干扰。
即: 两次SHA1加密后, 将结果加上 servertime 和 nonce 的值, 再SHA1 算一次。
将参数组织好, POST请求。 这之后还没有登录成功。
POST后得到的内容中包含一句 location.replace("http://weibo.com/ajaxlogin.php ... 6quot;);
  这是登录失败时的结果。登录成功后的结果类似,只是retcode的值为0,然后再次请求这个网址,这样就可以成功登录微博了。
  记得提前构建缓存。
  以下是完整代码(不做注释,一起来看看):
  #! /usr/bin/env python
#coding=utf8
import urllib
import urllib2
import cookielib
import base64
import re
import json
import hashlib
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
postdata = {
\'entry\': \'weibo\',
\'gateway\': \'1\',
\'from\': \'\',
\'savestate\': \'7\',
\'userticket\': \'1\',
\'ssosimplelogin\': \'1\',
\'vsnf\': \'1\',
\'vsnval\': \'\',
\'su\': \'\',
\'service\': \'miniblog\',
\'servertime\': \'\',
\'nonce\': \'\',
\'pwencode\': \'wsse\',
\'sp\': \'\',
\'encoding\': \'UTF-8\',
\'url\': \'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack\',
\'returntype\': \'META\'
}
def get_servertime():
url = \'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939\'
data = urllib2.urlopen(url).read()
p = re.compile(\'\((.*)\)\')
try:
json_data = p.search(data).group(1)
data = json.loads(json_data)
servertime = str(data[\'servertime\'])
nonce = data[\'nonce\']
return servertime, nonce
except:
print \'Get severtime error!\'
return None
def get_pwd(pwd, servertime, nonce):
pwd1 = hashlib.sha1(pwd).hexdigest()
pwd2 = hashlib.sha1(pwd1).hexdigest()
pwd3_ = pwd2 + servertime + nonce
pwd3 = hashlib.sha1(pwd3_).hexdigest()
return pwd3
def get_user(username):
username_ = urllib.quote(username)
username = base64.encodestring(username_)[:-1]
return username
def login():
username = \'你的登录邮箱\'
pwd = \'你的密码\'
url = \'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)\'
try:
servertime, nonce = get_servertime()
except:
return
global postdata
postdata[\'servertime\'] = servertime
postdata[\'nonce\'] = nonce
postdata[\'su\'] = get_user(username)
postdata[\'sp\'] = get_pwd(pwd, servertime, nonce)
postdata = urllib.urlencode(postdata)
headers = {\'User-Agent\':\'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0\'}
req = urllib2.Request(
url = url,
data = postdata,
headers = headers
)
result = urllib2.urlopen(req)
text = result.read()
p = re.compile(\'location\.replace\(\\'(.*?)\\'\)\')
try:
login_url = p.search(text).group(1)
#print login_url
urllib2.urlopen(login_url)
print "登录成功!"
except:
print \'Login error!\'
login()
  (二)模拟登录新浪微博(直接填写Cookie)
  之前写过一个模拟登录新浪微博,使用POST用户名/密码参数(加密)并保存Cookies来模拟登录。
  一般情况下,为了保证安全,网站会定期更新登录细节,比如修改参数名,更新加密(散列)算法等,所以模拟登录的代码肯定会周期性的失败,但是如果网站 没有进行大的更新,稍微修改一下还是可以使用的。此外,验证码的处理难度更大。虽然该程序在一定程度上可以识别验证码字符,但目前还很难找到一个简单通用的验证码识别程序。
  很多豆友反映,他们需要模拟登录新浪微博来抓取数据。事实上,对于一般的微博数据获取,比如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,并且在网页处理上节省大量精力。对于没有对API开放的数据,我们再采用模拟登录的方式。
  熟悉网络的朋友只要定期维护模拟登录的代码就可以成功登录微博。如果你不是很熟悉,其实可以用更幼稚的方法来解决:直接将Cookie发送到新浪微博,实现模拟登录。
  1. 获取饼干
  这很简单。您可以通过Chrome浏览器的“开发者工具”或火狐浏览器的“HTTPFOX”等插件直接查看您的新浪微博cookies。(注意:不要泄露这个私人Cookie!)
  比如Chrome查看cookie(快捷键F12可以调出chrome开发者工具)
  镀铬饼干
  镀铬饼干
  
  2. 提交Cookie作为访问微博的header参数
  headers = {\'cookie\': \'你的 cookie\'}
  req = urllib2.Request(url, headers=headers) #每次访问页面时,带上headers参数
  r = urllib2.urlopen(req)
  具体代码见:
  (三)多蠢的cookie问题,最后还是自己解决了...
  我不太了解HTTP中的协议和东西,但我知道有这样的东西。是时候阅读《HTTP 权威指南》这本书了,以免...
  同学说可以用cookies登录人人网、微博什么的,他是网络安全高手,黑客类,我这方面菜鸟,所以很想试试。
  网上找了很多资源,包括模拟登录新浪微博(直接填写Cookie)
  我知道在哪里可以找到 cookie,就像这样(我使用 chrome)
  
  点击进去,它看起来像这样
  
  不,这个想法是灵活的。肯定是打开方式不对……所以,打开F12,打开浏览器控制台,查看网络页面,像这样:
  
  赶快去地址输入网址吧!!我们会发现很多东西经过
  
  看到了,是蓝色的东西,复制粘贴,粘贴到代码里,就好了
  
  最后,抓取ajax
  (四)使用python实现新浪微博爬虫
  接下来考虑爬取微博内容的实现。
  这时,我遇到了困难。当我抓取指定网址的微博时,最初只显示了15条。后者是延迟显示(在ajax中称为延迟加载?)。也就是说,当滚动条第一次拖到底部时,会显示第二部分,然后再拖到底部,会显示第三部分。此时,一个页面的微博就完成了。因此,要获取一个微博页面的所有微博,需要访问该页面3次。创建getWeiboPage.py文件,对应代码如下:
  #!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import urllib2
import sys
import time

reload(sys)
sys.setdefaultencoding(\'utf-8\')

class getWeiboPage:
body = {
\'__rnd\':\'\',
\'_k\':\'\',
\'_t\':\'0\',
\'count\':\'50\',
\'end_id\':\'\',
\'max_id\':\'\',
\'page\':1,
\'pagebar\':\'\',
\'pre_page\':\'0\',
\'uid\':\'\'
}
uid_list = []
charset = \'utf8\'

def get_msg(self,uid):
getWeiboPage.body[\'uid\'] = uid
url = self.get_url(uid)
self.get_firstpage(url)
self.get_secondpage(url)
self.get_thirdpage(url)
def get_firstpage(self,url):
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']-1
url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text1\',text)
self.writefile(\'./output/result1\',eval("u\'\'\'"+text+"\'\'\'"))

def get_secondpage(self,url):
getWeiboPage.body[\'count\'] = \'15\'
# getWeiboPage.body[\'end_id\'] = \'3490160379905732\'
# getWeiboPage.body[\'max_id\'] = \'3487344294660278\'
getWeiboPage.body[\'pagebar\'] = \'0\'
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']

url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text2\',text)
self.writefile(\'./output/result2\',eval("u\'\'\'"+text+"\'\'\'"))
def get_thirdpage(self,url):
getWeiboPage.body[\'count\'] = \'15\'
getWeiboPage.body[\'pagebar\'] = \'1\'
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']

url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text3\',text)
self.writefile(\'./output/result3\',eval("u\'\'\'"+text+"\'\'\'"))
def get_url(self,uid):
url = \'http://weibo.com/\' + uid + \'?from=otherprofile&wvr=3.6&loc=tagweibo\'
return url
def get_uid(self,filename):
fread = file(filename)
for line in fread:
getWeiboPage.uid_list.append(line)
print line
time.sleep(1)
def writefile(self,filename,content):
fw = file(filename,\'w\')
fw.write(content)
fw.close() 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(关于新浪微博爬虫的一些事儿,你知道吗?
)
  最近和孙承杰老师在NLP实验室做了一些事情。我打算结合新浪微博的用户数据,基于文章的“多标签分类”算法,看看实验的效果。于是找了一些关于新浪微博爬虫的资料,整理如下:
  (一)模拟登录新浪微博(Python)(使用python程序获取cookie登录)
  更新:如果只是写个小爬虫,访问需要登录的页面,使用填cookies的方法,简单粗暴有效。有关详细信息,请参阅:
  模拟登录有时需要了解js加密(散列)方法、输入验证方法等,同一段代码很难一直有效。
  文本:
  PC登录新浪微博时,用户名和密码在客户端用js进行了预加密,POST前会GET一组参数,也是POST_DATA的一部分。这样就不能用通常的简单方法来模拟POST登录(如人人网)。
  由于部分要使用的微博数据不方便通过API获取,所以还是要自己写一个小爬虫,模拟登录是必不可少的。想了想这件事,最后还是登录成功了。
  1、在提交POST请求之前,需要GET获取两个参数。
  地址为:(v1.3.18)
  得到的数据中收录了“servertime”和“nonce”的值,是随机的,其他的值好像没什么用。
  2、通过httpfox观察POST数据,参数比较复杂,其中“su”为加密用户名,“sp”为加密密码。“servertime”和“nonce”是从上一步获得的。其他参数不变。
  username 经过了BASE64 计算: username = base64.encodestring( urllib.quote(username) )[:-1];
password 经过了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值来干扰。
即: 两次SHA1加密后, 将结果加上 servertime 和 nonce 的值, 再SHA1 算一次。
将参数组织好, POST请求。 这之后还没有登录成功。
POST后得到的内容中包含一句 location.replace("http://weibo.com/ajaxlogin.php ... 6quot;);
  这是登录失败时的结果。登录成功后的结果类似,只是retcode的值为0,然后再次请求这个网址,这样就可以成功登录微博了。
  记得提前构建缓存。
  以下是完整代码(不做注释,一起来看看):
  #! /usr/bin/env python
#coding=utf8
import urllib
import urllib2
import cookielib
import base64
import re
import json
import hashlib
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
postdata = {
\'entry\': \'weibo\',
\'gateway\': \'1\',
\'from\': \'\',
\'savestate\': \'7\',
\'userticket\': \'1\',
\'ssosimplelogin\': \'1\',
\'vsnf\': \'1\',
\'vsnval\': \'\',
\'su\': \'\',
\'service\': \'miniblog\',
\'servertime\': \'\',
\'nonce\': \'\',
\'pwencode\': \'wsse\',
\'sp\': \'\',
\'encoding\': \'UTF-8\',
\'url\': \'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack\',
\'returntype\': \'META\'
}
def get_servertime():
url = \'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939\'
data = urllib2.urlopen(url).read()
p = re.compile(\'\((.*)\)\')
try:
json_data = p.search(data).group(1)
data = json.loads(json_data)
servertime = str(data[\'servertime\'])
nonce = data[\'nonce\']
return servertime, nonce
except:
print \'Get severtime error!\'
return None
def get_pwd(pwd, servertime, nonce):
pwd1 = hashlib.sha1(pwd).hexdigest()
pwd2 = hashlib.sha1(pwd1).hexdigest()
pwd3_ = pwd2 + servertime + nonce
pwd3 = hashlib.sha1(pwd3_).hexdigest()
return pwd3
def get_user(username):
username_ = urllib.quote(username)
username = base64.encodestring(username_)[:-1]
return username
def login():
username = \'你的登录邮箱\'
pwd = \'你的密码\'
url = \'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)\'
try:
servertime, nonce = get_servertime()
except:
return
global postdata
postdata[\'servertime\'] = servertime
postdata[\'nonce\'] = nonce
postdata[\'su\'] = get_user(username)
postdata[\'sp\'] = get_pwd(pwd, servertime, nonce)
postdata = urllib.urlencode(postdata)
headers = {\'User-Agent\':\'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0\'}
req = urllib2.Request(
url = url,
data = postdata,
headers = headers
)
result = urllib2.urlopen(req)
text = result.read()
p = re.compile(\'location\.replace\(\\'(.*?)\\'\)\')
try:
login_url = p.search(text).group(1)
#print login_url
urllib2.urlopen(login_url)
print "登录成功!"
except:
print \'Login error!\'
login()
  (二)模拟登录新浪微博(直接填写Cookie)
  之前写过一个模拟登录新浪微博,使用POST用户名/密码参数(加密)并保存Cookies来模拟登录。
  一般情况下,为了保证安全,网站会定期更新登录细节,比如修改参数名,更新加密(散列)算法等,所以模拟登录的代码肯定会周期性的失败,但是如果网站 没有进行大的更新,稍微修改一下还是可以使用的。此外,验证码的处理难度更大。虽然该程序在一定程度上可以识别验证码字符,但目前还很难找到一个简单通用的验证码识别程序。
  很多豆友反映,他们需要模拟登录新浪微博来抓取数据。事实上,对于一般的微博数据获取,比如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,并且在网页处理上节省大量精力。对于没有对API开放的数据,我们再采用模拟登录的方式。
  熟悉网络的朋友只要定期维护模拟登录的代码就可以成功登录微博。如果你不是很熟悉,其实可以用更幼稚的方法来解决:直接将Cookie发送到新浪微博,实现模拟登录。
  1. 获取饼干
  这很简单。您可以通过Chrome浏览器的“开发者工具”或火狐浏览器的“HTTPFOX”等插件直接查看您的新浪微博cookies。(注意:不要泄露这个私人Cookie!)
  比如Chrome查看cookie(快捷键F12可以调出chrome开发者工具)
  镀铬饼干
  镀铬饼干
  
  2. 提交Cookie作为访问微博的header参数
  headers = {\'cookie\': \'你的 cookie\'}
  req = urllib2.Request(url, headers=headers) #每次访问页面时,带上headers参数
  r = urllib2.urlopen(req)
  具体代码见:
  (三)多蠢的cookie问题,最后还是自己解决了...
  我不太了解HTTP中的协议和东西,但我知道有这样的东西。是时候阅读《HTTP 权威指南》这本书了,以免...
  同学说可以用cookies登录人人网、微博什么的,他是网络安全高手,黑客类,我这方面菜鸟,所以很想试试。
  网上找了很多资源,包括模拟登录新浪微博(直接填写Cookie)
  我知道在哪里可以找到 cookie,就像这样(我使用 chrome)
  
  点击进去,它看起来像这样
  
  不,这个想法是灵活的。肯定是打开方式不对……所以,打开F12,打开浏览器控制台,查看网络页面,像这样:
  
  赶快去地址输入网址吧!!我们会发现很多东西经过
  
  看到了,是蓝色的东西,复制粘贴,粘贴到代码里,就好了
  
  最后,抓取ajax
  (四)使用python实现新浪微博爬虫
  接下来考虑爬取微博内容的实现。
  这时,我遇到了困难。当我抓取指定网址的微博时,最初只显示了15条。后者是延迟显示(在ajax中称为延迟加载?)。也就是说,当滚动条第一次拖到底部时,会显示第二部分,然后再拖到底部,会显示第三部分。此时,一个页面的微博就完成了。因此,要获取一个微博页面的所有微博,需要访问该页面3次。创建getWeiboPage.py文件,对应代码如下:
  #!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import urllib2
import sys
import time

reload(sys)
sys.setdefaultencoding(\'utf-8\')

class getWeiboPage:
body = {
\'__rnd\':\'\',
\'_k\':\'\',
\'_t\':\'0\',
\'count\':\'50\',
\'end_id\':\'\',
\'max_id\':\'\',
\'page\':1,
\'pagebar\':\'\',
\'pre_page\':\'0\',
\'uid\':\'\'
}
uid_list = []
charset = \'utf8\'

def get_msg(self,uid):
getWeiboPage.body[\'uid\'] = uid
url = self.get_url(uid)
self.get_firstpage(url)
self.get_secondpage(url)
self.get_thirdpage(url)
def get_firstpage(self,url):
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']-1
url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text1\',text)
self.writefile(\'./output/result1\',eval("u\'\'\'"+text+"\'\'\'"))

def get_secondpage(self,url):
getWeiboPage.body[\'count\'] = \'15\'
# getWeiboPage.body[\'end_id\'] = \'3490160379905732\'
# getWeiboPage.body[\'max_id\'] = \'3487344294660278\'
getWeiboPage.body[\'pagebar\'] = \'0\'
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']

url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text2\',text)
self.writefile(\'./output/result2\',eval("u\'\'\'"+text+"\'\'\'"))
def get_thirdpage(self,url):
getWeiboPage.body[\'count\'] = \'15\'
getWeiboPage.body[\'pagebar\'] = \'1\'
getWeiboPage.body[\'pre_page\'] = getWeiboPage.body[\'page\']

url = url +urllib.urlencode(getWeiboPage.body)
req = urllib2.Request(url)
result = urllib2.urlopen(req)
text = result.read()
self.writefile(\'./output/text3\',text)
self.writefile(\'./output/result3\',eval("u\'\'\'"+text+"\'\'\'"))
def get_url(self,uid):
url = \'http://weibo.com/\' + uid + \'?from=otherprofile&wvr=3.6&loc=tagweibo\'
return url
def get_uid(self,filename):
fread = file(filename)
for line in fread:
getWeiboPage.uid_list.append(line)
print line
time.sleep(1)
def writefile(self,filename,content):
fw = file(filename,\'w\')
fw.write(content)
fw.close()

使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站或服务器端)

网站优化优采云 发表了文章 • 0 个评论 • 58 次浏览 • 2021-12-21 12:02 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站或服务器端)
  使用新浪微博开放平台api同步微博内容至自己网站或服务器端,然后对网站或服务器进行二次开发(seo,权重提升,转发等)。如果网站或服务器使用了新浪微博商业服务(如,用来直接发广告),那么可以做个jsonxml接口进行实时推送。
  直接上阿里云购买微博服务器。卖家会给你一个配置文件。例如这个-ternews.xml进去修改你的域名和服务器配置。
  twitter有个跨站http请求转发,mailtosmtp,
  voip转发这是已经被证明的事情。但是微博为了支持twitter服务,要求用户需要登录才能转发,这无疑增加了这部分功能的流失量。
  你试试电脑和手机同时登录新浪微博,如果登录就会默认跳转到新浪的官方网站(我觉得这是新浪微博使用的策略),
  微博服务器不是客户端地址,我都是mailtosmtp。
  先设置好你需要在微博官网有所要上的网站,然后根据网站,统一订阅(及上传发送状态)或者自行经营,在有心人点击发送前,发一条讯息直接发送到要转发的地址。
  开api.转发到/。
  这个似乎可以吧?不过要看你是个人或者网站还是企业的,如果是个人的需要在同一页面放你的网站或者企业网站, 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(使用新浪微博开放平台api同步微博内容至自己网站或服务器端)
  使用新浪微博开放平台api同步微博内容至自己网站或服务器端,然后对网站或服务器进行二次开发(seo,权重提升,转发等)。如果网站或服务器使用了新浪微博商业服务(如,用来直接发广告),那么可以做个jsonxml接口进行实时推送。
  直接上阿里云购买微博服务器。卖家会给你一个配置文件。例如这个-ternews.xml进去修改你的域名和服务器配置。
  twitter有个跨站http请求转发,mailtosmtp,
  voip转发这是已经被证明的事情。但是微博为了支持twitter服务,要求用户需要登录才能转发,这无疑增加了这部分功能的流失量。
  你试试电脑和手机同时登录新浪微博,如果登录就会默认跳转到新浪的官方网站(我觉得这是新浪微博使用的策略),
  微博服务器不是客户端地址,我都是mailtosmtp。
  先设置好你需要在微博官网有所要上的网站,然后根据网站,统一订阅(及上传发送状态)或者自行经营,在有心人点击发送前,发一条讯息直接发送到要转发的地址。
  开api.转发到/。
  这个似乎可以吧?不过要看你是个人或者网站还是企业的,如果是个人的需要在同一页面放你的网站或者企业网站,

使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台做个实践,开发一个功能简单的android客户端)

网站优化优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-12-21 02:11 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台做个实践,开发一个功能简单的android客户端)
  介绍
  最近不太忙,花了点时间学习Android应用开发。经过两周的学习,我在学习的同时也写了很多demo例子。您可以播放来自基本控件和基本动画效果的大量演示,并继续更新和下载。
  从本周开始,我打算以新浪微博开放平台为实践,开发一个简单的Android客户端,尽可能完善功能。
  今天的内容
  
  上图是这个客户端的主界面。目前只拿到了前20条数据。您也可以单击刷新来刷新数据。功能比较简单。
  运行系统为android2.2.
  用到的技术点包括ListView、自定义ListAdapter、多线程相关的Message、Handler、认证相关的OAuth、用户图片的异步加载。
  新浪微博的验证使用了signpost的OAuth组件,没有使用微博的SDK。
  
  来源下载:新浪微博2
  下载源代码后,将后缀改为rar,使用压缩软件解压即可。
  关于 OAuth 身份验证
  OAuth 是一种流行的授权方案。twitter、facebook、google等大型开放平台均支持oauth认证方式。新浪微博、腾讯微博、163微博等国内开放平台也已支持。这种验证方式。
  引用维基百科的相关说明
  “Oauth 是一种开放标准,允许用户允许第三方应用访问用户在某个网站上的私有资源,而无需将用户名和密码传递给第三方应用。oauth 允许用户提供一个令牌,而不是用户名和密码来访问它们存储在特定服务提供商中的数据。”
  例如:
  用户A在服务提供者B上存储了一些资源,B支持oauth授权方式。A 是 B 上的注册用户,拥有用户名和密码。您可以通过使用用户名和密码登录 B 来查看您的资源。假设有一个应用C,用户A在使用C时需要将资源存储在B上,实现C在B上展示资源有两种方式。
  这时候C可以使用B开启的oauth授权机制,当用户A想要展示B上的资源时,C会跳转到B的认证页面,用户在B的页面输入用户名和密码。通过后,会询问用户是否为C应用开发相关资源。用户可以自定义C可以访问的资源,然后跳转回C应用。这样就不用担心用户名和密码,也不会因为同时存储多个资源而导致维护问题。
  你可以通过下面的网站了解更多关于oauth的具体技术细节。
  
  从上图我们可以看出,实际的流程分为消费者和提供者两部分。Consumer是例子中的c应用,provider是例子中的B服务提供者。
  使用OAuth进行认证授权的过程如下:
  用户访问客户端的网站,想要操作服务提供者中存储的用户资源。客户端向服务提供者请求一个临时令牌。在服务提供者验证客户端的身份后,它会授予一个临时令牌。客户端获取临时令牌后,将用户引导至服务提供商的授权页面,请求用户授权。在这个过程中,临时令牌和客户端的回调连接被发送给服务提供者。用户在服务提供者的网页上输入用户名和密码,然后授权客户端访问所请求的资源。授权成功后,服务提供者将用户引导回客户端的网页。客户端根据临时令牌从服务提供者处获取访问令牌。服务提供者根据临时令牌和用户的授权向客户端授予访问令牌。客户端使用获取的访问令牌访问存储在服务提供者上的受保护资源。新浪微博上的Oauth
  
  借用新浪微博上的oauth验证流程图。
  当我们在新浪微博开放平台上创建一个新的应用程序时,我们会给新的应用程序分配一个key和secret,即consumerKey和consumerSecret。通过这两件事,我们去到request_token,然后将用户重定向到新浪微博平台的授权页面。授权后,我们将根据 callback_url 重定向到我们应用程序的地址。我们再次使用request_token获取access_token,后面需要传递。访问令牌访问开放平台提供的需要验证的接口。
  当然,那些不需要验证就可以访问的接口,直接使用key就可以访问了。具体请参考开放平台提供的API文档。
  腾讯微博和163微博的开放平台在原理和实现上是相似的。
  包com. 新浪微博2;导入 oauth。路标。OAuth消费者;导入 oauth。路标。OAuthProvider;导入 oauth。路标。公地http。CommonsHttpOAuthConsumer; 导入 oauth。路标。公地http。CommonsHttpOAuthProvider; 导入 oauth。路标。例外。OAuth通信异常;导入 oauth。路标。例外。OAuthExpectationFailedException; 导入 oauth。路标。例外。OAuthMessageSignerException; 导入 oauth。路标。例外。OAuthNotAuthorizedException; 公共类 OAuth {私有 OAuthConsumer mConsumer; 私有 OAuthProvider mProvider;public static final String CALLBACK_URL = "sinaweibo2://WeiboListActivity"; 公共静态最终字符串CONSUMER_KEY =“1849239616”;公共静态最终字符串 CONSUMER_SECRET = "b2137bf782d5a8394"
  吨。新浪。com。cn/oauth/request_token"; public static final String ACCESS_TOKEN_URL = ". 吨。新浪。com。cn/oauth/access_token"; public static final String AUTHORIZE_URL = ". 吨。新浪。com。cn/oauth/authorize"; public OAuth() {} public String RetrieveAuthUrl() 抛出 OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mConsumer = new CommonsHttpOAuthConsumer(CONSUTOMER_KEY, CONSUMER_SECRET_URL, SUMERZEUMERESUERESUERUrl 提供者字符串); = mProvider。
  检索请求令牌(mConsumer,CALLBACK_URL);return authUrl;} public void RetrieveAccessToken(String verifier) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mProvider. setOAuth10a(true); 供应商。检索访问令牌(mConsumer,验证器);OAuth 用户。USER_ID=mProvider。获取响应参数()。getFirst("user_id"); OAuth 用户。ACCESS_TOKEN = mConsumer。获取令牌();OAuth 用户。ACCESS_TOKEN_SECRET = mConsumer。getTokenSecret();}}
  更多功能
  接下来主要有两个功能需要改进,一个是分页浏览,一个是发布微博。
  未来可能会支持图片发布等实用功能。
  有UI美化和性能优化。
  总结
  学习过程中看了两本书,Pro.Android.2.pdf和Professional.Android.2.Application.Development.(Wrox,.2010,.0470565527).pdf,都是很不错的入门书籍,我没有全部看完,看了大部分之后,会一边看一边写demo。
  同时,我每天都会在论坛,eoe的开发者门户。回答问题、解决问题、提问、发帖,简而言之就是锻炼自己,强迫自己锻炼基础和思维。
  论坛上有很多中文pdf教程,但大部分都是从android开发者中心的Dev Guide和Resources中的内容翻译过来的。所以我觉得如果英文不是很差的话,建议直接阅读上面两节,同时练习其中的例子,保证两周内有很大的进步。
  参考
  Technorati 标签:android、开放平台、oauth、新浪微博 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台做个实践,开发一个功能简单的android客户端)
  介绍
  最近不太忙,花了点时间学习Android应用开发。经过两周的学习,我在学习的同时也写了很多demo例子。您可以播放来自基本控件和基本动画效果的大量演示,并继续更新和下载。
  从本周开始,我打算以新浪微博开放平台为实践,开发一个简单的Android客户端,尽可能完善功能。
  今天的内容
  
  上图是这个客户端的主界面。目前只拿到了前20条数据。您也可以单击刷新来刷新数据。功能比较简单。
  运行系统为android2.2.
  用到的技术点包括ListView、自定义ListAdapter、多线程相关的Message、Handler、认证相关的OAuth、用户图片的异步加载。
  新浪微博的验证使用了signpost的OAuth组件,没有使用微博的SDK。
  
  来源下载:新浪微博2
  下载源代码后,将后缀改为rar,使用压缩软件解压即可。
  关于 OAuth 身份验证
  OAuth 是一种流行的授权方案。twitter、facebook、google等大型开放平台均支持oauth认证方式。新浪微博、腾讯微博、163微博等国内开放平台也已支持。这种验证方式。
  引用维基百科的相关说明
  “Oauth 是一种开放标准,允许用户允许第三方应用访问用户在某个网站上的私有资源,而无需将用户名和密码传递给第三方应用。oauth 允许用户提供一个令牌,而不是用户名和密码来访问它们存储在特定服务提供商中的数据。”
  例如:
  用户A在服务提供者B上存储了一些资源,B支持oauth授权方式。A 是 B 上的注册用户,拥有用户名和密码。您可以通过使用用户名和密码登录 B 来查看您的资源。假设有一个应用C,用户A在使用C时需要将资源存储在B上,实现C在B上展示资源有两种方式。
  这时候C可以使用B开启的oauth授权机制,当用户A想要展示B上的资源时,C会跳转到B的认证页面,用户在B的页面输入用户名和密码。通过后,会询问用户是否为C应用开发相关资源。用户可以自定义C可以访问的资源,然后跳转回C应用。这样就不用担心用户名和密码,也不会因为同时存储多个资源而导致维护问题。
  你可以通过下面的网站了解更多关于oauth的具体技术细节。
  
  从上图我们可以看出,实际的流程分为消费者和提供者两部分。Consumer是例子中的c应用,provider是例子中的B服务提供者。
  使用OAuth进行认证授权的过程如下:
  用户访问客户端的网站,想要操作服务提供者中存储的用户资源。客户端向服务提供者请求一个临时令牌。在服务提供者验证客户端的身份后,它会授予一个临时令牌。客户端获取临时令牌后,将用户引导至服务提供商的授权页面,请求用户授权。在这个过程中,临时令牌和客户端的回调连接被发送给服务提供者。用户在服务提供者的网页上输入用户名和密码,然后授权客户端访问所请求的资源。授权成功后,服务提供者将用户引导回客户端的网页。客户端根据临时令牌从服务提供者处获取访问令牌。服务提供者根据临时令牌和用户的授权向客户端授予访问令牌。客户端使用获取的访问令牌访问存储在服务提供者上的受保护资源。新浪微博上的Oauth
  
  借用新浪微博上的oauth验证流程图。
  当我们在新浪微博开放平台上创建一个新的应用程序时,我们会给新的应用程序分配一个key和secret,即consumerKey和consumerSecret。通过这两件事,我们去到request_token,然后将用户重定向到新浪微博平台的授权页面。授权后,我们将根据 callback_url 重定向到我们应用程序的地址。我们再次使用request_token获取access_token,后面需要传递。访问令牌访问开放平台提供的需要验证的接口。
  当然,那些不需要验证就可以访问的接口,直接使用key就可以访问了。具体请参考开放平台提供的API文档。
  腾讯微博和163微博的开放平台在原理和实现上是相似的。
  包com. 新浪微博2;导入 oauth。路标。OAuth消费者;导入 oauth。路标。OAuthProvider;导入 oauth。路标。公地http。CommonsHttpOAuthConsumer; 导入 oauth。路标。公地http。CommonsHttpOAuthProvider; 导入 oauth。路标。例外。OAuth通信异常;导入 oauth。路标。例外。OAuthExpectationFailedException; 导入 oauth。路标。例外。OAuthMessageSignerException; 导入 oauth。路标。例外。OAuthNotAuthorizedException; 公共类 OAuth {私有 OAuthConsumer mConsumer; 私有 OAuthProvider mProvider;public static final String CALLBACK_URL = "sinaweibo2://WeiboListActivity"; 公共静态最终字符串CONSUMER_KEY =“1849239616”;公共静态最终字符串 CONSUMER_SECRET = "b2137bf782d5a8394"
  吨。新浪。com。cn/oauth/request_token"; public static final String ACCESS_TOKEN_URL = ". 吨。新浪。com。cn/oauth/access_token"; public static final String AUTHORIZE_URL = ". 吨。新浪。com。cn/oauth/authorize"; public OAuth() {} public String RetrieveAuthUrl() 抛出 OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mConsumer = new CommonsHttpOAuthConsumer(CONSUTOMER_KEY, CONSUMER_SECRET_URL, SUMERZEUMERESUERESUERUrl 提供者字符串); = mProvider。
  检索请求令牌(mConsumer,CALLBACK_URL);return authUrl;} public void RetrieveAccessToken(String verifier) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mProvider. setOAuth10a(true); 供应商。检索访问令牌(mConsumer,验证器);OAuth 用户。USER_ID=mProvider。获取响应参数()。getFirst("user_id"); OAuth 用户。ACCESS_TOKEN = mConsumer。获取令牌();OAuth 用户。ACCESS_TOKEN_SECRET = mConsumer。getTokenSecret();}}
  更多功能
  接下来主要有两个功能需要改进,一个是分页浏览,一个是发布微博。
  未来可能会支持图片发布等实用功能。
  有UI美化和性能优化。
  总结
  学习过程中看了两本书,Pro.Android.2.pdf和Professional.Android.2.Application.Development.(Wrox,.2010,.0470565527).pdf,都是很不错的入门书籍,我没有全部看完,看了大部分之后,会一边看一边写demo。
  同时,我每天都会在论坛,eoe的开发者门户。回答问题、解决问题、提问、发帖,简而言之就是锻炼自己,强迫自己锻炼基础和思维。
  论坛上有很多中文pdf教程,但大部分都是从android开发者中心的Dev Guide和Resources中的内容翻译过来的。所以我觉得如果英文不是很差的话,建议直接阅读上面两节,同时练习其中的例子,保证两周内有很大的进步。
  参考
  Technorati 标签:android、开放平台、oauth、新浪微博

使用新浪微博开放平台api同步微博内容至自己网站(新浪微博的API研究研究,实现了类拷过来)

网站优化优采云 发表了文章 • 0 个评论 • 42 次浏览 • 2021-12-20 11:12 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博的API研究研究,实现了类拷过来)
  今天发布了一个关于新浪微博API的研究,现在已经实现了发布微博的功能,包括带图片的微博。为安全起见,新浪微博API不提供微博账号密码登录功能。相反,它使用 OAuth 授权。用户通过浏览器访问新浪网站进行登录,登录成功后,浏览器将key和secret返回给程序。
  main.xml:
  一个登录按钮、一个输入框和一个发布按钮
  因为是接收浏览器返回的数据,所以AndroidManifest.xml在注册Activity时必须添加一个Intent-Filter。
  intent-filter 必须写成两段。如果写在一起,就不会被激活。
  简单起见,直接复制新浪示例中的OAuthConstant类:
  接下来是最关键的主程序:
  
package com.pocketdigi.weibo;

import java.io.File;

import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Main extends Activity {
/** Called when the activity is first created. */
String key = "", secret = "";
Button login,send;
EditText status;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.setProperty("weibo4j.oauth.consumerKey", "3997936609");
System.setProperty("weibo4j.oauth.consumerSecret",
"8bc9e3bfd6ae8e3b2b8bda9079918950");
//设置在新浪应用开放平台申请的应用的key和secret
login=(Button)findViewById(R.id.login);
send=(Button)findViewById(R.id.send);
status=(EditText)findViewById(R.id.status);
login.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
login();
//登录
}});
send.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String text=String.valueOf(status.getText());
Weibo weibo = new Weibo();
weibo.setToken(key,secret);
try {
//weibo.updateStatus(text);
//只发文字
File f=new File("/sdcard/wallpaper/129567208597069400.jpg");
weibo.uploadStatus(text,f );
//发文字+图片,这里需要导入commons-httpclient-3.0.1.jar,自己网上下
//在实际项目上,最好放Thread里,因为按下去的时候按钮会卡
} catch (WeiboException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
//启动时执行检测是否来自网页登录返回
//如果是,获取key和secret
//否则读取SharedPreferences
//若得不到key和secret,直接跳转登录
Uri uri = this.getIntent().getData();
if (uri != null) {
//如果是浏览器返回
try {
RequestToken requestToken = OAuthConstant.getInstance()
.getRequestToken();
AccessToken accessToken = requestToken.getAccessToken(uri
.getQueryParameter("oauth_verifier"));
OAuthConstant.getInstance().setAccessToken(accessToken);
// 保存
Editor sharedata = getSharedPreferences("WeiBo", 0).edit();
sharedata.putString("key", accessToken.getToken());
sharedata.putString("secret", accessToken.getTokenSecret());
sharedata.commit();
key = accessToken.getToken();
secret = accessToken.getTokenSecret();
} catch (WeiboException e) {
e.printStackTrace();
}
} else {
//如果是用户自己启动
SharedPreferences settings = getSharedPreferences("WeiBo", 0);
key = settings.getString("key", "");
secret = settings.getString("secret", "");
}
if (key.equals("") || secret.equals("")) {
Toast.makeText(this, "尚未登录", Toast.LENGTH_LONG).show();
login();
//跳转到浏览器登录

}

}
public void login(){
Weibo weibo = OAuthConstant.getInstance().getWeibo();
RequestToken requestToken;
try {
requestToken =weibo.getOAuthRequestToken("sina://weibo");
//为了避免与同类应用冲突,还是自己改下URI吧
Uri uri2 = Uri.parse(requestToken.getAuthenticationURL()+ "&from=xweibo");
OAuthConstant.getInstance().setRequestToken(requestToken);
startActivity(new Intent(Intent.ACTION_VIEW, uri2));
} catch (WeiboException e) {
e.printStackTrace();
}
}
}
  发送图片需要导入commons-httpclient-3.0.1.jar,否则启动会报错,当然是weibo4android-1. 2.0. jar 必不可少 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(新浪微博的API研究研究,实现了类拷过来)
  今天发布了一个关于新浪微博API的研究,现在已经实现了发布微博的功能,包括带图片的微博。为安全起见,新浪微博API不提供微博账号密码登录功能。相反,它使用 OAuth 授权。用户通过浏览器访问新浪网站进行登录,登录成功后,浏览器将key和secret返回给程序。
  main.xml:
  一个登录按钮、一个输入框和一个发布按钮
  因为是接收浏览器返回的数据,所以AndroidManifest.xml在注册Activity时必须添加一个Intent-Filter。
  intent-filter 必须写成两段。如果写在一起,就不会被激活。
  简单起见,直接复制新浪示例中的OAuthConstant类:
  接下来是最关键的主程序:
  
package com.pocketdigi.weibo;

import java.io.File;

import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Main extends Activity {
/** Called when the activity is first created. */
String key = "", secret = "";
Button login,send;
EditText status;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.setProperty("weibo4j.oauth.consumerKey", "3997936609");
System.setProperty("weibo4j.oauth.consumerSecret",
"8bc9e3bfd6ae8e3b2b8bda9079918950");
//设置在新浪应用开放平台申请的应用的key和secret
login=(Button)findViewById(R.id.login);
send=(Button)findViewById(R.id.send);
status=(EditText)findViewById(R.id.status);
login.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
login();
//登录
}});
send.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String text=String.valueOf(status.getText());
Weibo weibo = new Weibo();
weibo.setToken(key,secret);
try {
//weibo.updateStatus(text);
//只发文字
File f=new File("/sdcard/wallpaper/129567208597069400.jpg");
weibo.uploadStatus(text,f );
//发文字+图片,这里需要导入commons-httpclient-3.0.1.jar,自己网上下
//在实际项目上,最好放Thread里,因为按下去的时候按钮会卡
} catch (WeiboException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
//启动时执行检测是否来自网页登录返回
//如果是,获取key和secret
//否则读取SharedPreferences
//若得不到key和secret,直接跳转登录
Uri uri = this.getIntent().getData();
if (uri != null) {
//如果是浏览器返回
try {
RequestToken requestToken = OAuthConstant.getInstance()
.getRequestToken();
AccessToken accessToken = requestToken.getAccessToken(uri
.getQueryParameter("oauth_verifier"));
OAuthConstant.getInstance().setAccessToken(accessToken);
// 保存
Editor sharedata = getSharedPreferences("WeiBo", 0).edit();
sharedata.putString("key", accessToken.getToken());
sharedata.putString("secret", accessToken.getTokenSecret());
sharedata.commit();
key = accessToken.getToken();
secret = accessToken.getTokenSecret();
} catch (WeiboException e) {
e.printStackTrace();
}
} else {
//如果是用户自己启动
SharedPreferences settings = getSharedPreferences("WeiBo", 0);
key = settings.getString("key", "");
secret = settings.getString("secret", "");
}
if (key.equals("") || secret.equals("")) {
Toast.makeText(this, "尚未登录", Toast.LENGTH_LONG).show();
login();
//跳转到浏览器登录

}

}
public void login(){
Weibo weibo = OAuthConstant.getInstance().getWeibo();
RequestToken requestToken;
try {
requestToken =weibo.getOAuthRequestToken("sina://weibo");
//为了避免与同类应用冲突,还是自己改下URI吧
Uri uri2 = Uri.parse(requestToken.getAuthenticationURL()+ "&from=xweibo");
OAuthConstant.getInstance().setRequestToken(requestToken);
startActivity(new Intent(Intent.ACTION_VIEW, uri2));
} catch (WeiboException e) {
e.printStackTrace();
}
}
}
  发送图片需要导入commons-httpclient-3.0.1.jar,否则启动会报错,当然是weibo4android-1. 2.0. jar 必不可少

使用新浪微博开放平台api同步微博内容至自己网站(利用PHP进行新浪微博API开发的内容一个整理和说明)

网站优化优采云 发表了文章 • 0 个评论 • 34 次浏览 • 2021-12-20 11:12 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(利用PHP进行新浪微博API开发的内容一个整理和说明)
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。整理和说明内容
  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站是: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,
  新浪微博API开发前的准备
  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:
  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。
  新浪微博API开发最重要的用户授权流程
  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。新浪微博开放平台的OAuth授权流程非常清晰完整。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。
  1.首先获取未授权的Request Token
  复制代码代码如下:
  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );
  $keys = $o-&gt;getRequestToken();
  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);
  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。
  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。
  2. 然后请求用户授权token
  复制代码代码如下:
  $_SESSION['keys'] = $keys;
  aurl = $o-&gt;getAuthorizeURL( $keys['oauth_token'] ,false,'');
  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。拿到$aurl后,我们可以使用header()直接跳转到那个授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会自动再次跳转回来。
  需要注意的是,需要设置session key的值,在下面获取的授权Access Token中需要。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面无法获取Access Token的值。必须记住这一点。
  3.用户最后授权的Access Token
  复制代码代码如下:
  $o = 新微博OAuth( WB_AKEY,
  WB_SKEY,
  $_SESSION['keys']['oauth_token'],
  $_SESSION['keys']['oauth_token_secret'] );
  $last_key = $o-&gt;getAccessToken( $_REQUEST['oauth_verifier']);
  回声($last_key['oauth_token']);
  以上代码最终获得了用户授权的Access Token。一共有两个值,存放在$last_key数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。
  授权后工作
  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。
  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:
  复制代码代码如下:
  //获取前20条最新更新的公众微博新闻
  $c = 新微博客户端( WB_AKEY,
  WB_SKEY,
  $oauth_token,
  $oauth_token_secret );
  $msg = $c-&gt;public_timeline();
  if ($msg === false || $msg === null){
  echo "发生错误";
  返回假;
  }
  if (isset($msg['error_code']) &amp;&amp; isset($msg['error'])){
  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error']);
  返回假;
  }
  打印_r($msg);
  通常我们拿到用户授权的access token值后,会保存在我们的user表中,对应我们应用中的账号。之后我们就不用每次调用新浪微博的API接口都去。认证。
  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有错误。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,那么使用Json格式数据有先天优势,如果返回Json格式数据,直接使用php即可。函数 json_decode() 可以转换为 PHP 常用的数组格式。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(利用PHP进行新浪微博API开发的内容一个整理和说明)
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。整理和说明内容
  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站是: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,
  新浪微博API开发前的准备
  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:
  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。
  新浪微博API开发最重要的用户授权流程
  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。新浪微博开放平台的OAuth授权流程非常清晰完整。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。
  1.首先获取未授权的Request Token
  复制代码代码如下:
  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );
  $keys = $o-&gt;getRequestToken();
  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);
  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。
  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。
  2. 然后请求用户授权token
  复制代码代码如下:
  $_SESSION['keys'] = $keys;
  aurl = $o-&gt;getAuthorizeURL( $keys['oauth_token'] ,false,'');
  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。拿到$aurl后,我们可以使用header()直接跳转到那个授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会自动再次跳转回来。
  需要注意的是,需要设置session key的值,在下面获取的授权Access Token中需要。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面无法获取Access Token的值。必须记住这一点。
  3.用户最后授权的Access Token
  复制代码代码如下:
  $o = 新微博OAuth( WB_AKEY,
  WB_SKEY,
  $_SESSION['keys']['oauth_token'],
  $_SESSION['keys']['oauth_token_secret'] );
  $last_key = $o-&gt;getAccessToken( $_REQUEST['oauth_verifier']);
  回声($last_key['oauth_token']);
  以上代码最终获得了用户授权的Access Token。一共有两个值,存放在$last_key数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。
  授权后工作
  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。
  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:
  复制代码代码如下:
  //获取前20条最新更新的公众微博新闻
  $c = 新微博客户端( WB_AKEY,
  WB_SKEY,
  $oauth_token,
  $oauth_token_secret );
  $msg = $c-&gt;public_timeline();
  if ($msg === false || $msg === null){
  echo "发生错误";
  返回假;
  }
  if (isset($msg['error_code']) &amp;&amp; isset($msg['error'])){
  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error']);
  返回假;
  }
  打印_r($msg);
  通常我们拿到用户授权的access token值后,会保存在我们的user表中,对应我们应用中的账号。之后我们就不用每次调用新浪微博的API接口都去。认证。
  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有错误。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,那么使用Json格式数据有先天优势,如果返回Json格式数据,直接使用php即可。函数 json_decode() 可以转换为 PHP 常用的数组格式。

使用新浪微博开放平台api同步微博内容至自己网站( 利用PHP进行新浪微博API开发的内容进行一个整理和说明)

网站优化优采云 发表了文章 • 0 个评论 • 38 次浏览 • 2021-12-20 02:13 • 来自相关话题

  使用新浪微博开放平台api同步微博内容至自己网站(
利用PHP进行新浪微博API开发的内容进行一个整理和说明)
  新浪微博API开发用户授权介绍(PHP基础)
  更新时间:2011-09-25 22:52:37 作者:
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。整理和说明内容
  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站是: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,
  新浪微博API开发前的准备
  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:
  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。
  新浪微博API开发最重要的用户授权流程
  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。新浪微博开放平台的OAuth授权流程非常清晰完整。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。
  1.首先获取未授权的Request Token
  复制代码代码如下:
  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );
  $keys = $o-&gt;getRequestToken();
  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);
  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。
  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。
  2. 然后请求用户授权token
  复制代码代码如下:
  $_SESSION['keys'] = $keys;
  aurl = $o-&gt;getAuthorizeURL( $keys['oauth_token'] ,false,'');
  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。拿到$aurl后,我们可以使用header()直接跳转到那个授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会自动再次跳转回来。
  需要注意的是,需要设置session key的值,在下面获取的授权Access Token中需要。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面无法获取Access Token的值。必须记住这一点。
  3.用户最后授权的Access Token
  复制代码代码如下:
  $o = 新微博OAuth( WB_AKEY,
  WB_SKEY,
  $_SESSION['keys']['oauth_token'],
  $_SESSION['keys']['oauth_token_secret'] );
  $last_key = $o-&gt;getAccessToken( $_REQUEST['oauth_verifier']);
  回声($last_key['oauth_token']);
  以上代码最终获得了用户授权的Access Token。一共有两个值,存放在$last_key数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。
  授权后工作
  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。
  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:
  复制代码代码如下:
  //获取前20条最新更新的公众微博新闻
  $c = 新微博客户端( WB_AKEY,
  WB_SKEY,
  $oauth_token,
  $oauth_token_secret );
  $msg = $c-&gt;public_timeline();
  if ($msg === false || $msg === null){
  echo "发生错误";
  返回假;
  }
  if (isset($msg['error_code']) &amp;&amp; isset($msg['error'])){
  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error']);
  返回假;
  }
  打印_r($msg);
  通常我们拿到用户授权的access token值后,会保存在我们的user表中,对应我们应用中的账号。之后我们就不用每次调用新浪微博的API接口都去。认证。
  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有错误。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,那么使用Json格式数据有先天优势,如果返回Json格式数据,直接使用php即可。函数 json_decode() 可以转换为 PHP 常用的数组格式。 查看全部

  使用新浪微博开放平台api同步微博内容至自己网站(
利用PHP进行新浪微博API开发的内容进行一个整理和说明)
  新浪微博API开发用户授权介绍(PHP基础)
  更新时间:2011-09-25 22:52:37 作者:
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。整理和说明内容
  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站是: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.
  在开发和学习的过程中,我觉得虽然不是太难,但还是有一些问题需要我们注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,
  新浪微博API开发前的准备
  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:
  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。
  新浪微博API开发最重要的用户授权流程
  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。新浪微博开放平台的OAuth授权流程非常清晰完整。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。
  1.首先获取未授权的Request Token
  复制代码代码如下:
  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );
  $keys = $o-&gt;getRequestToken();
  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);
  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。
  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。
  2. 然后请求用户授权token
  复制代码代码如下:
  $_SESSION['keys'] = $keys;
  aurl = $o-&gt;getAuthorizeURL( $keys['oauth_token'] ,false,'');
  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。拿到$aurl后,我们可以使用header()直接跳转到那个授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会自动再次跳转回来。
  需要注意的是,需要设置session key的值,在下面获取的授权Access Token中需要。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面无法获取Access Token的值。必须记住这一点。
  3.用户最后授权的Access Token
  复制代码代码如下:
  $o = 新微博OAuth( WB_AKEY,
  WB_SKEY,
  $_SESSION['keys']['oauth_token'],
  $_SESSION['keys']['oauth_token_secret'] );
  $last_key = $o-&gt;getAccessToken( $_REQUEST['oauth_verifier']);
  回声($last_key['oauth_token']);
  以上代码最终获得了用户授权的Access Token。一共有两个值,存放在$last_key数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。
  授权后工作
  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。
  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:
  复制代码代码如下:
  //获取前20条最新更新的公众微博新闻
  $c = 新微博客户端( WB_AKEY,
  WB_SKEY,
  $oauth_token,
  $oauth_token_secret );
  $msg = $c-&gt;public_timeline();
  if ($msg === false || $msg === null){
  echo "发生错误";
  返回假;
  }
  if (isset($msg['error_code']) &amp;&amp; isset($msg['error'])){
  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error']);
  返回假;
  }
  打印_r($msg);
  通常我们拿到用户授权的access token值后,会保存在我们的user表中,对应我们应用中的账号。之后我们就不用每次调用新浪微博的API接口都去。认证。
  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有错误。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,那么使用Json格式数据有先天优势,如果返回Json格式数据,直接使用php即可。函数 json_decode() 可以转换为 PHP 常用的数组格式。

官方客服QQ群

微信人工客服

QQ人工客服


线