社交网络翻译
granar的Python项目详细描述
粮仓<社交网络翻译。使用微格式2获取和转换社交网络、HTML和JSON之间的数据,microformats2,activitystreams,atom,json提要,等等。
- 关于
- 使用
- 使用rest api
- 使用库
- 故障排除/常见问题解答
- 未来工作
- 开发
- 发布说明
- 相关工作
- 更改日志
关于
granary是一个库和rest api,它在各种数据源和格式之间获取和转换:
- Facebook、Flickr、Github、Instagram和Twitter原生API
- Instagram刮掉的HTML
- 活动流1.0和2.0(json)
- 带有微格式2的HTML和JSON
- atom,rss 2.0,json提要
- 纯XML
免费您自己从思洛APIchaff中获取信息并以标准格式和协议公开甜蜜的社会数据食品!
以下是开始的方法:
- granary在pypi上可用。使用
pip install granary安装granary
- 支持Python2.7+和3.3+。
- 单击此处查看入门文档。
- 单击此处查看参考文档。
- rest api和demo应用程序部署在granary.io上。
许可证:此项目位于公共域中。
使用
所有依赖项都由pip处理,并在requirements.txt中枚举。我们建议您在avirtualenv
中安装pip。(应用程序引擎详细信息。)
库和rest api都基于opensocial活动流服务
让我们从一个例子开始。此代码使用库:
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
相当于http get请求:
https://granary.io/twitter/@me/@friends/@app/
?access_token_key=ACCESS_TOKEN_KEY&access_token_secret=ACCESS_TOKEN_SECRET
他们返回经过身份验证的用户的twitter流(tweets)。以下是json输出:
{"itemsPerPage":10,"startIndex":0,"totalResults":12,"items":[{"verb":"post","id":"tag:twitter.com,2013:374272979578150912","url":"http://twitter.com/evanpro/status/374272979578150912","content":"Getting stuff for barbecue tomorrow. No ribs left! Got some nice tenderloin though. (@ Metro Plus Famille Lemay) http://t.co/b2PLgiLJwP","actor":{"username":"evanpro","displayName":"Evan Prodromou","description":"Prospector.","url":"http://twitter.com/evanpro",},"object":{"tags":[{"url":"http://4sq.com/1cw5vf6","startIndex":113,"length":22,"objectType":"article"},"..."],},},"..."]"..."}
这两个请求参数都是相同的,都是可选的:user_id
是源特定的id,或者@me
是经过身份验证的用户。组id
可以是@all
,@friends
(当前与@all
),@self
,@search
或@blocks
;应用程序id
当前被忽略;最佳做法是使用@a p p
作为占位符。
通过startindex
和count
参数支持分页。它们是不言而喻的,并在和中详细描述。OpenSocial规范
使用组id
@search
时(对于支持它的平台-当前为Twitter和Instagram),请通过q
参数提供搜索字符串。该API松散地基于OpenSearch规范,OpenSocial核心容器规范,以及opensocial core gadget spec
输出数据是封装在OpenSocial信封中的JSON活动流1.0对象,它将活动in顶级的项目
字段作为列表,并添加项目页面
、总计数
等字段。
大多数facebook请求以及所有twitter、instagram和flickr请求都需要oauth访问令牌。如果您在google app engine上使用python,则可以轻松地为这些站点添加oauth客户端流。否则,以下是网站的身份验证文档:facebook,flickr,Instagram上,Twitter上
如果您获得一个访问令牌并将其传递给源提供程序,它将用于对基础请求进行签名和授权。有关示例,请参见上面的rest api端点演示。
使用rest api
上面的端点都服务于opensocial activity streams rest api。请求路径的格式为:
/USER_ID/GROUP_ID/APP_ID/ACTIVITY_ID?startIndex=...&count=...&format=FORMAT&access_token=...
所有查询参数都是可选的。格式
可以是as1
(默认值)、as2
、atom
、html
、jsonfeed
、mf2 json
、rss
或xml
(默认值)。atom
支持booleanreader
查询参数,用于切换适合馈送读卡器的呈现,例如,当reader=true
时,在内容中呈现位置(默认值)。其余的path元素和查询参数如上文所述。
返回的错误带有相应的http响应代码,例如403表示未经授权,详细信息请参见响应正文。
默认情况下,响应被缓存和重用10米而不重新获取源数据。(Instagram响应缓存60米。)您可以通过在请求中添加cache=false
查询参数来防止这种情况发生。
若要在现有ActivityStreams客户端中使用rest api,您需要对要使用的域(例如facebook.com
)硬编码异常,并将http请求重定向到上面相应的端点
web ui(granary.io)目前只为用户获取facebook访问令牌。如果要使用它访问Facebook页面,则需要使用图形API资源管理器手动获取访问令牌(单击获取…下拉列表)。然后,在granary.io上登录facebook,并将页面访问令牌粘贴到访问令牌文本框中。
使用库
有关快速入门指南,请参见上面的示例。
将此回购复制或下载到名为granary
的目录中(注意下划线而不是破折号)。每个源的工作方式相同。导入要使用的源的模块,然后通过传递http处理程序对象来实例化其类。对于当前的http请求,处理程序应该有一个请求
属性。
有用的方法是get_activities()
和get_actor()
,它们返回当前经过身份验证的用户(如果有的话)。有关详细信息,请参阅个别方法文档字符串。所有返回值都是解码活动流1 json的python指令。
microformats2.*u to_html()
函数对于将ActivityStreams 1对象呈现为格式良好的HTML也很有用。
故障排除/常见问题解答
查看oauth dropins疑难解答/faq部分。它非常全面,也适用于这个项目。对于可搜索性,这里有一些错误消息,其中有解决方案:
bash: ./bin/easy_install: ...bad interpreter: No such file or directory
ImportError: cannot import name certs
ImportError: cannot import name tweepy
File ".../site-packages/tweepy/auth.py", line 68, in _get_request_token
raise TweepError(e)
TweepError: must be _socket.socket, not socket
未来工作
我们想添加更多的网站!在我的头顶上,youtu beyoutube,tumblr,wordpress.com,新浪微博n.wikipedia.org/wiki/qzone" rel="nofollow">qzone,以及renrenren都是很好的候选人。如果你想开始,实现一个新的网站是一个很好的开始。它相当独立,现有的网站是很好的例子,但这是一个不错的工作量,所以你将熟悉整个项目结束。
开发
欢迎拉取请求!如有任何问题,请随时给我发消息。
您将需要供应商
支持)。将其添加到您的$pythonpath
,例如export pythonpath=$pythonpath:/usr/local/google_appengine
,然后运行:
virtualenv localsource local/bin/activate
pip install -r requirements.txt
python setup.py test
如果您发送拉取请求,请尽可能包括(或更新)新功能的测试!测试需要使用gcloud app engine python和gcloud appengine appengine python extras
组件
如果您想同时使用oauth dropins,请使用
pip install-e<;oauth dropins repo的路径
要部署:
python -m unittest discover && gcloud -q app deploy granary-demo *.yaml
部署facebook atom、twitter atom和instagram atom。eed.appspot.com/" rel="nofollow">plusstreamfeed更换粮仓后:
#!/bin/tcsh
foreach s (facebook-atom twitter-atom instagram-atom plusstreamfeed)cd ~/src/$s&& gcloud -q app deploy $s *.yaml
end
这些文档是用sphinx构建的,包括apidoc、autodoc、autodoc。tp://www.sphinx-doc.org/en/stable/ext/napoleon.html" rel="nofollow">拿破仑。配置在docs/conf.py
中,要构建它们,首先使用pip install sphinx
安装sphinx。(您可能希望在virtualenv之外执行此操作;如果是,则需要重新配置它,以使用virtualenv--system site packages local
查看系统包)然后,运行docs/build.sh
。
此activitystreams验证器对于手动测试非常有用。
发布说明
下面介绍如何打包、测试和发布新版本。(请注意,这是在oauth dropins自述文件中也大量复制的发布说明)
- 运行单元测试。
source local/bin/activate.csh
python2 -m unittest discover
deactivate
source local3/bin/activate.csh
python3 -m unittest discover -s granary/tests/
deactivate
- 在
setup.py
和docs/conf.py
中增加版本号。git grep
旧版本号,以确保它只出现在变更日志中。将此新版本的readme.md
中的当前更改日志条目从unreleased更改为当前日期。 - 建立文档。如果添加了任何新模块,请将它们添加到
docs/source/
中的相应文件中。然后运行/docs/build.sh
git commit-am'发布vx.y'
- 上传到test.pypi.org进行测试。
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
0
- 从test.pypi.org安装python 2和3。
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
1
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
2
- Smoke测试代码在Python2和Python3中轻松加载和运行。
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
3
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
4
要粘贴到解释器中的测试代码:
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
5
- 用git标记发布。在标记消息编辑器中,删除底部生成的注释,将第一行留空(以省略github中的release"title"),将
显著更改
放在第二行,然后将此版本的更改日志内容复制并粘贴到下面。
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
6
- 单击此处在githu上起草新版本b.在标记版本框中输入
vx.y
。保留释放标题为空。将"显著更改"和"更改日志"内容复制到"说明"文本框中。 - 上传到pypi.org!
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
7
相关工作
apache streams是一个类似的项目,可以在存储系统、数据库和社会模式之间进行转换。它是一个Java库,它的设计结构很重。这是它支持的格式列表。它主要由人员模式使用
gnip类似地将社交网络数据转换为activitystreams并支持更多的源网络。不幸的是,它是商业性的,没有免费试用或自助注册,而且计划从500美元开始。
datalift看起来大体上是一样的,只是它们提供了自助服务、随付随付的账单,并且它们使用服务。低">他们自己的专有输出格式而不是activitystreams。它们的目标也更多地是数据挖掘,而不是单个用户访问。
cliqset的feedproxy用于进行这种格式转换,但不幸的是,它和cliqset都死了。
facebook过去一直是官方网站支持activitystreams,但这也没用。
有很多产品可以下载你的社交网络数据,将其规范化,并让你查询和可视化。虽然ssl证书当前已过期,但socialsafe是一个。Thinkup是一款开源产品,但于2016年7月18日关闭。还有从多个源站点提取数据的项目的lifelogging/lifestream聚合器。storytlr就是一个很好的例子。它不包括Facebook或Instagram,但包括一些较小的源网站。还有很多其他插件,例如lifestream wordpress插件。不幸的是,它们通常面向最终用户,而不是开发人员,并且通常不公开库或restapi。
在开源方面,有很多相关的项目。php-mf2-shim将微格式2添加到Facebook和Twitter的原始HTML中。sockethub是一种类似的"polyglot"方法,但更侧重于写作而非阅读。
更改日志
2.0-2019-03-01
中断更改:删除google+,因为它在3月份关闭。值得注意的是,这将删除Google Plus的模块。
<H3>1。15-2019年2月28日- 添加rss 2.0输出!(124)
- 所有筒仓:
- 将用户的主要URL从网站切换到思洛配置文件(\158)。
Github:
- 不要在
<;
/>;
中括起裸露的URL(snarfed/bridge/issues/850" rel="nofollow">snarfed/bridge/850)。
原子:
- 多个图片URL的演员和附件的错误修复。
- 没有属性的附件作者对象的错误修复。
谷歌+:
- 从Web UI和Rest API中删除,因为消费者Google+正在完全关闭。(更多信息。。
- 从不推荐使用的全局API终结点切换到G+终结点。背景介绍:谷歌博客帖子snarfed/bridgey 846,ython/guide/batch" rel="nofollow">和文档
- Instagram软件:
Twitter:
- 将最大视频上载大小从5MB更新为512MB(\162)。
/url
:获取用户的url时返回http 400将导致无限重定向。
1.14-2018年11月12日
添加delete()
。目前包括Twitter和Flickr支持。
- Instagram软件:
- 进行额外的http获取(使用cookie)以获得个人喜好(snarfed/bridgey 840)。
- 更新刮削逻辑以处理feed html更改。
- link@-在评论和照片/视频标题中提及。
Github:
create
/preview\u create
private repo问题和评论的错误修复。- 处理来自rest api的http 410丢失的响应,例如当repo被删除或repo的问题被禁用时。
Twitter:
- 添加
delete()
和preview\u delete()
以删除推文。
Flickr:
- 添加
delete()
和preview\u delete()
以删除照片。
- 微格式2:
原子:
- 在作者URL和电子邮件地址中编码
&;s。(感谢sebused!)
< > AS2:
- 添加
跟随支持。
1.13-2018年8月8日
Twitter:
- 支持ISO 8601格式的created_at timestamps,归档文件下载使用的是以及来自API的RFC 2822。
- <代码>CREate()和
preview_create()
:支持rsvps。将它们作为带有rsvp内容的普通tweets发送。(snarfed/bridgey 818) create()
和preview_create()
:通过as1displayname,支持图像的alt文本。(snarfed/bridgey 756)。
- Instagram软件:
- 添加全局速率限制锁以进行刮削。如果一个scraping http请求得到429或503响应,我们拒绝对5m发出更多请求,而是短路并返回相同的错误。这可以用一个新的
ignore_rate_limit
kwarg覆盖到get_activities()
Github:
- 添加
标记支持创建/预览创建将标签添加到现有问题(snarfed/bridge 811)。
- 在
create()
和preview\u create()
中的内容中转义HTML字符(<;
,>;
,和&;
)(snarfed/bridgey)。 get_activities()
和get_comment()
现在分别返回格式错误的活动id
和注释id
参数,而不是断言错误。
get_activities()
Bug fix for issues/prs无正文文本。- 从graphql切换到rest api以创建注释和响应,因为graphql在许多org repo上都会遇到授权错误。(snarfed/bridgey 824)
- 改进对评论和用户的graphql支持。
原子:
- 必要时缩短提要标题并将其省略号(\144)。
- 微格式2:
- 升级mf2py以改进一些功能,如隐含的p-name检测和空白处理(\142,修复"145,snarfed/bridgey,snarfed/bridgey)。
- 在
<;img>;
标记中支持alt
属性(snarfed/bridgey)。
1.12-2018年3月24日
- 添加Python3支持!Granary现在需要Python2.7+或Python3.3+。
- Instagram软件:
- 修复刮削配置文件页。
Twitter:
- 更新字符计数以处理twitter的更改,该更改现在自动链接allcctlds。背景。
Github:
- 用已删除的问题和报告修复
get_activities()
的错误。
- 微格式2:
object_to_json()
:将标记转换为类别中的简单字符串
属性,而不是完全嵌套的对象,如h-card
s(\141)。- 响应回购协议或其
/issues
url的特殊情况GitHub问题是objectTypeissue
- 在HTML输出中呈现简单的字符串类别。
这个版本故意很小,范围有限,以包含python 3迁移的任何影响。它应该是现有Python2用户的noop,我们已经泰德说得很清楚,但我肯定还是有虫子。如果您发现任何损坏,请提交问题!
1.11-2018-03-09
- 添加github!
- 脸谱网:
- 支持新的重复AKA多实例事件。
create()
和preview\u create()
现在只支持对多实例事件的单个实例的rsvps,以匹配facebook api本身。 - 努力寻找原始(完整)大小的照片url,特别是
.jpg
文件,而不是.jpg
create()
修复带有Unicode字符的照片和图像URL的错误。- 修正了
获取活动(用户id=…)
包含经过身份验证的用户自己最近的照片、相册和新闻发布的错误。
- Instagram软件:
- 从刮取的配置文件页中提取更多用户(
作者
)数据。 - 修复主页提要刮擦。
- 微格式2,原子:
- 为图像附件添加附件。
- 修复了在共享和附件中呈现图像、视频和音频附件的错误。重复数据消除图像。
- 微格式2:
- 只处理简单字符串的作者属性。
- 添加
fetch_mf2
kwarg tojson_to_object()
用于通过http获取附加页以确定作者身份。 - 在HTML中生成显式的空白p-name,以防止出现旧的有缺陷的p-name处理(http://microformats.org/wiki/microformats2-implied-properties" rel="nofollow">隐式p-name处理)。
- 修正了
activity-to-json()
和activities-to-html()
中的动词处理(\134)。 - 记住哪些内容包含HTML,保留其中的换行符,不要将这些换行符转换为
<;br>;
s(\130)。
原子:
- 修正
updated和published中的时区错误
- JSON源:
- 如果标题与内容相同,则省略标题。(通常由微格式2的隐含
p-name
逻辑引起。)
1.10-2017年12月10日
- 将网站和rest api移动到granary.io!granary demo.appspot.com现在301重定向。
Twitter:
- 将发布字符限制更新为280。背景。
- 修复预览版中的a错误创建自动链接@-在URL中提及,例如medi嗯,帖子。
- 在
get_activities()
等中支持视频和动画gif。
- Instagram软件:
- 将cookie query param添加到rest api中,以允许对登录到用户提要中的内容进行抓取。
- HTML(包括Atom内容):
- 更频繁、更一致地呈现图像、视频和音频附件。
- 包括微格式2
U-photo
,U-video
,以及更经常、更一致地U-audio
类。
原子:
- 添加
atom_to_activities()
以转换完整的feed文档。 - 添加到rest api和web ui。
- 在
rel=alternate
链接以及actor/author url中包含源url(\151)。
- JSON源:
- 修复某些情况下省略标题的错误(122)。
1.9-2017年10月24日
- 添加activitystreams 2.0!新的
AS2
模块包括到@AS1()
和从@AS1()
函数。当前支持:文章、便笺、回复、喜欢、转发、事件、RSVP、标记、附件。
原子:
- 添加新的
Atom to_activity()
函数,用于将Atom转换为AS1。 - 将电子邮件字段添加到作者(如果提供)。
- JSON源:
- 错误(非dict)输入时出现raise valueerror。
- rest api:
- 为
format
和input
添加as2
值。将现有的activitystreams和microformats2值名称修改为as1
,as1 xml
,以及mf2 json
。旧值activitystreams
,json
,json-mf2
,以及xml
仍被接受,但已弃用。
1.8-2017年8月29日
- 添加对库和rest api的支持。
Twitter:
- 添加
get_blocklist()
- 用于创建视频URL的回复、收藏夹或转发的错误修复,例如https://twitter.com/name/status/123/video/1" rel="nofollow">https://twitter.com/name/status/123/video/1
- 用于解析收藏夹HTML以处理Twitter端的小更改的错误修复。
post_id()
现在在返回id之前更严格地验证它们。
- 脸谱网:
- Instagram软件:
- 更新scraping以处理新的主页(ie news feed)json模式,该模式在2017年2月27日左右发生了变化。(个人资料页和个人照片/视频永久链接尚未更改。)
- 微格式2:
- 将
u-featured
添加到activitystreamsimage
- 改进对h-event的支持。
- 当将位置呈现为HTML时,小的空白改变(添加了
)。
post_id()
现在在返回id之前更严格地验证它们。- 修正在ActivityStreams和MF2之间转换经纬度的错误。
谷歌+:
- 更新html抓取以处理更改的序列化json数据格式。
原子:
- 添加新的
activity_to_atom()
函数,该函数将呈现一个顶级的<;entry>;
,而不是<;feed>;
。 - 添加新的
reader
query param,用于切换特定于feed readers的呈现决策。现在,只影响位置:当reader=true
(默认值)时在内容中呈现,当reader=false
(默认值)时省略。
- 在呈现附加文章和注释(例如引用tweets)时,请包括作者姓名。
- 只有当元素具有值时,才包括as
activity:object type
和activity:verb
元素。 - 如果内容中没有图像和MF2 U-photo,则渲染为图像和MF2 U-photo。
- render
thr:响应fromobject.in reply to
以及activity.context.inreplyto
- rest api:
- 修复HTML=>;JSON-MF2和HTML=>;HTML转换中的错误。
- 将brevity升级到0.2.14,以修复一对错误修复程序
1.7-2017年2月27日
- 微格式2:
- 将h-cite和u-quotation-of(实验性)解释为附件,例如引用tweets。
- 将音频和视频属性转换为附件。
Twitter:
- linkify@-在
preview\u create()
中提到和标记
- 支持从带有twitter url的附件创建引用tweets。
- 将quote tweets转换为as时,请从文本末尾删除quoted tweet url。
- 传递
get_activities()
但不传递search_query
时引发值错误
- Instagram软件:
- 改进HTML抓取错误处理。
- 支持多照片/视频帖子
- 脸谱网:
- 禁用创建"感兴趣"的RSVP,因为Facebook的API不允许它。
原子:
- 支持音频和视频附件的媒体附件。
- source.get_activities():开始对错误的参数值引发valueerror,特别是无效的facebook和twitter id以及instagram搜索查询。
- 修复用Unicode高代码点(即16位基本多语言平面之上)呈现和链接内容的问题,包括一些emoji,在Python2的"窄"版本上使用
--enable unicode=ucs2
,这是Mac OS X、Windows和旧的*nix上的默认设置。
1.6-2016年11月26日
Twitter:
- 处理新的"扩展"tweets,隐藏对@提到的回复并跟踪
媒体、引用推文等的URL背景:
https://dev.twitter.com/overview/api/coming-changes-to-tweets
- 错误修复:确保like.author.displayname是一个普通的unicode字符串,以便
可以正常进行pickle操作,例如通过app engine的memcache。
- 错误修复:在Favorites_html_to_likes()中正确处理带有表情符号的名称。
- 错误修复:使用Unicode字符处理搜索查询。
原子:
- 在引用tweets的转发中呈现完整的原始引用tweet。
- 微格式2 HTML:
- 可以选择跟随并获取rel="author"链接。
- 改进微格式2和ActivityStreams"photo"类型之间的映射。(mf2"photo"类型是带有照片的注释或文章,但作为"photo"类型,则是照片。因此,将mf2照片映射到没有照片的底层类型。)
- 支持H-Card以外的位置属性,例如H-ADR、H-GEO、U-GEO,甚至
当纬度和经度等属性出现在顶层时。
- 错误处理:对于非json api响应返回http 502,对于连接失败返回504。
1.5-2016年8月25日
- rest api:
- 支持用户id、应用id和活动id的标记uri。
Twitter:
- 上传不支持类型的照片时会出现更好的错误信息。
- 只包括原始的引用推文,不包括它们的转发。
- 跳过获取受保护帐户的转发,因为API调用始终为403。
Flickr:
- 更好的用户名检测。flickr的api在用户名方面非常不一致
vs实名vs路径别名。这特别检测用户名
可能是真的,因为它有一个空格。
- 上载:检测并处理应用程序引擎的10MB HTTP请求限制。
- 创建中的错误修复:处理照片/视频描述中的Unicode字符,
标签和注释文本。
原子:
- 错误修复:在附件文本中转义(如引用tweets)。
- 错误修复:处理ActivityStreams 1活动中的多值"对象"字段。
Github:
- 将创建注释和反应从graphql切换到rest api(bridge 824
1.4.1-2016年6月27日
- 将OAuth Dropins要求提高到1.4。
1.4.0-2016年6月27日
- rest api:
- 默认情况下,缓存思洛存储器的请求为5米,instagram的请求为60米,因为它们会积极阻止抓取。您可以使用新的cache=false查询参数跳过缓存。
- 脸谱网:
- 从api v2.2升级到v2.6。https://developers.facebook.com/docs/apps/changelog
- 添加反作用力支撑。
- 按用户对事件rsvps进行重复数据消除。
Twitter:
- 切换create()以使用简洁性计算字符数。https://github.com/kylewm/brevity
- 修正create()中偶尔错误转义的.,+,和-字符的错误。
- 修复有多张照片/视频时的文本呈现错误。
- 在回答自己的问题时,不要加上"自我"一词。
- Instagram软件:
- 修复刮削中的错误。
- 升级至requests 2.10.0和requests toolbelt 0.60,后者支持app engine。
1.3.1-2016年4月7日
- 更新oauth dropins对1.3的依赖性oauth dropins
1.3.0-2016年4月6日
- 支持发布视频!目前在Facebook、Flickr和Twitter上。
- Instagram软件:
- 添加对刮削的支持,因为它们会锁定自己的api并需要手动批准。
- linkify@-在图片标题中提到。
- 脸谱网:
- 获取打开图形故事aka
news.publish
操作。 - 许多照片贴的错误修正:更好的隐私检测,修正错误贴上评论的错误。
Twitter:
- 处理所有附加到推特的照片/视频,而不仅仅是第一个。
- 停止获取对@-提及的答复。
原子:
- 呈现附件。
- 添加
xml:base
- 微格式2:
- 加载并转换H卡。
- 使用mf2util实现完整的post类型发现算法。https://indiewbcamp.com/post-type-discovery
- 放弃对H-AS-*类的支持,包括传入和传出。它们不赞成后类型发现。
- 删除旧的不推荐的
u-like代码>和u-repost属性。
- 其他错误修复。
- 准备工作服。
1.2.0-2016年1月11日
- 改进原始的后发现算法。(新娘51)
- Flickr调整。(新娘466)
- 将mf2、activitystreams、atom和search添加到交互式ui。(31,29)
- 改进后类型发现(使用mf2util)。
- 从配置文件中的所有字段中提取用户网站链接(例如,描述/生物)。
- 将捏造的片段添加到comment/like permalinks(例如,like-by-user123)中,以便对象url始终是唯一的(多个思洛存储器)。
- 在创建/预览(多个思洛存储器)中改进格式/空白支持。
谷歌+:
- 添加搜索。
- 脸谱网:
- 在"获取"活动中获取更多信息:照片、活动、RSVP。
- 在创建/预览中支持个人标签。
- 通过将照片上载到"时间线照片"相册,防止Facebook自动整合照片帖子。
- 在创建/预览中包含标题。
- 改进对象ID解析/解析。
- 改进标签处理。
- 获取嵌套注释的错误修复。
- 其他改进,API错误/片状处理。
Flickr:
- 创建/预览对照片、评论、收藏夹、标记、个人标记、位置的支持。
Twitter:
- 创建/预览位置、多张照片的支持。
- 获取报价推文。
- 获取用户提到的改进,错误修复。
- 固定嵌入。
- MISC作为转换改进。
- 微格式2:
- 改进like和repost渲染。
- 其他错误修复。
- 设置圆圈。
1.1.0-2015年9月6日
- 添加Flickr。
- 脸谱网:
- 获取多个ID格式,例如带有或不带有用户ID前缀。
- 支持线程注释。
- 从/posts api端点切换到/feed。
谷歌+:
- 支持将plus.google.com HTML转换为ActivityStreams。
- Instagram软件:
- 支持位置。
- 改进原始的后发现算法。
- 新徽标。
1.0.1-2015年7月11日
- Atom模板渲染的错误修复。
- Facebook,Instagram:支持访问令牌参数。
1.0-2015年7月10日
- 初始PYPI版本。
推荐PyPI第三方库
社交网络翻译。使用微格式2获取和转换社交网络、HTML和JSON之间的数据,microformats2,activitystreams,atom,json提要,等等。
- 关于
- 使用
- 使用rest api
- 使用库
- 故障排除/常见问题解答
- 未来工作
- 开发
- 发布说明
- 相关工作
- 更改日志
关于
granary是一个库和rest api,它在各种数据源和格式之间获取和转换:
- Facebook、Flickr、Github、Instagram和Twitter原生API
- Instagram刮掉的HTML
- 活动流1.0和2.0(json)
- 带有微格式2的HTML和JSON
- atom,rss 2.0,json提要
- 纯XML
免费您自己从思洛APIchaff中获取信息并以标准格式和协议公开甜蜜的社会数据食品!
以下是开始的方法:
- granary在pypi上可用。使用
pip install granary安装granary
- 支持Python2.7+和3.3+。
- 单击此处查看入门文档。
- 单击此处查看参考文档。
- rest api和demo应用程序部署在granary.io上。
许可证:此项目位于公共域中。
使用
所有依赖项都由pip处理,并在requirements.txt中枚举。我们建议您在avirtualenv
中安装pip。(应用程序引擎详细信息。)
库和rest api都基于opensocial活动流服务
让我们从一个例子开始。此代码使用库:
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
相当于http get请求:
https://granary.io/twitter/@me/@friends/@app/
?access_token_key=ACCESS_TOKEN_KEY&access_token_secret=ACCESS_TOKEN_SECRET
他们返回经过身份验证的用户的twitter流(tweets)。以下是json输出:
{"itemsPerPage":10,"startIndex":0,"totalResults":12,"items":[{"verb":"post","id":"tag:twitter.com,2013:374272979578150912","url":"http://twitter.com/evanpro/status/374272979578150912","content":"Getting stuff for barbecue tomorrow. No ribs left! Got some nice tenderloin though. (@ Metro Plus Famille Lemay) http://t.co/b2PLgiLJwP","actor":{"username":"evanpro","displayName":"Evan Prodromou","description":"Prospector.","url":"http://twitter.com/evanpro",},"object":{"tags":[{"url":"http://4sq.com/1cw5vf6","startIndex":113,"length":22,"objectType":"article"},"..."],},},"..."]"..."}
这两个请求参数都是相同的,都是可选的:user_id
是源特定的id,或者@me
是经过身份验证的用户。组id
可以是@all
,@friends
(当前与@all
),@self
,@search
或@blocks
;应用程序id
当前被忽略;最佳做法是使用@a p p
作为占位符。
通过startindex
和count
参数支持分页。它们是不言而喻的,并在和中详细描述。OpenSocial规范
使用组id
@search
时(对于支持它的平台-当前为Twitter和Instagram),请通过q
参数提供搜索字符串。该API松散地基于OpenSearch规范,OpenSocial核心容器规范,以及opensocial core gadget spec
输出数据是封装在OpenSocial信封中的JSON活动流1.0对象,它将活动in顶级的项目
字段作为列表,并添加项目页面
、总计数
等字段。
大多数facebook请求以及所有twitter、instagram和flickr请求都需要oauth访问令牌。如果您在google app engine上使用python,则可以轻松地为这些站点添加oauth客户端流。否则,以下是网站的身份验证文档:facebook,flickr,Instagram上,Twitter上
如果您获得一个访问令牌并将其传递给源提供程序,它将用于对基础请求进行签名和授权。有关示例,请参见上面的rest api端点演示。
使用rest api
上面的端点都服务于opensocial activity streams rest api。请求路径的格式为:
/USER_ID/GROUP_ID/APP_ID/ACTIVITY_ID?startIndex=...&count=...&format=FORMAT&access_token=...
所有查询参数都是可选的。格式
可以是as1
(默认值)、as2
、atom
、html
、jsonfeed
、mf2 json
、rss
或xml
(默认值)。atom
支持booleanreader
查询参数,用于切换适合馈送读卡器的呈现,例如,当reader=true
时,在内容中呈现位置(默认值)。其余的path元素和查询参数如上文所述。
返回的错误带有相应的http响应代码,例如403表示未经授权,详细信息请参见响应正文。
默认情况下,响应被缓存和重用10米而不重新获取源数据。(Instagram响应缓存60米。)您可以通过在请求中添加cache=false
查询参数来防止这种情况发生。
若要在现有ActivityStreams客户端中使用rest api,您需要对要使用的域(例如facebook.com
)硬编码异常,并将http请求重定向到上面相应的端点
web ui(granary.io)目前只为用户获取facebook访问令牌。如果要使用它访问Facebook页面,则需要使用图形API资源管理器手动获取访问令牌(单击获取…下拉列表)。然后,在granary.io上登录facebook,并将页面访问令牌粘贴到访问令牌
文本框中。
使用库
有关快速入门指南,请参见上面的示例。
将此回购复制或下载到名为granary
的目录中(注意下划线而不是破折号)。每个源的工作方式相同。导入要使用的源的模块,然后通过传递http处理程序对象来实例化其类。对于当前的http请求,处理程序应该有一个请求
属性。
有用的方法是get_activities()
和get_actor()
,它们返回当前经过身份验证的用户(如果有的话)。有关详细信息,请参阅个别方法文档字符串。所有返回值都是解码活动流1 json的python指令。
microformats2.*u to_html()
函数对于将ActivityStreams 1对象呈现为格式良好的HTML也很有用。
故障排除/常见问题解答
查看oauth dropins疑难解答/faq部分。它非常全面,也适用于这个项目。对于可搜索性,这里有一些错误消息,其中有解决方案:
bash: ./bin/easy_install: ...bad interpreter: No such file or directory
ImportError: cannot import name certs
ImportError: cannot import name tweepy
File ".../site-packages/tweepy/auth.py", line 68, in _get_request_token
raise TweepError(e)
TweepError: must be _socket.socket, not socket
未来工作
我们想添加更多的网站!在我的头顶上,youtu beyoutube,tumblr,wordpress.com,新浪微博n.wikipedia.org/wiki/qzone" rel="nofollow">qzone,以及renrenren都是很好的候选人。如果你想开始,实现一个新的网站是一个很好的开始。它相当独立,现有的网站是很好的例子,但这是一个不错的工作量,所以你将熟悉整个项目结束。
开发
欢迎拉取请求!如有任何问题,请随时给我发消息。
您将需要供应商
支持)。将其添加到您的$pythonpath
,例如export pythonpath=$pythonpath:/usr/local/google_appengine
,然后运行:
virtualenv localsource local/bin/activate pip install -r requirements.txt python setup.py test
如果您发送拉取请求,请尽可能包括(或更新)新功能的测试!测试需要使用gcloud app engine python和
gcloud appengine appengine python extras
组件
如果您想同时使用oauth dropins,请使用
要部署: 部署facebook atom、twitter atom和instagram atom。eed.appspot.com/" rel="nofollow">plusstreamfeed更换粮仓后: 这些文档是用sphinx构建的,包括apidoc、autodoc、autodoc。tp://www.sphinx-doc.org/en/stable/ext/napoleon.html" rel="nofollow">拿破仑。配置在pip install-e<;oauth dropins repo的路径
python -m unittest discover && gcloud -q app deploy granary-demo *.yaml
#!/bin/tcsh
foreach s (facebook-atom twitter-atom instagram-atom plusstreamfeed)cd ~/src/$s&& gcloud -q app deploy $s *.yaml
end
docs/conf.py
中,要构建它们,首先使用pip install sphinx
安装sphinx。(您可能希望在virtualenv之外执行此操作;如果是,则需要重新配置它,以使用virtualenv--system site packages local
查看系统包)然后,运行docs/build.sh
。
发布说明
下面介绍如何打包、测试和发布新版本。(请注意,这是在oauth dropins自述文件中也大量复制的发布说明)
- 运行单元测试。
source local/bin/activate.csh python2 -m unittest discover deactivate source local3/bin/activate.csh python3 -m unittest discover -s granary/tests/ deactivate
- 在
setup.py
和docs/conf.py
中增加版本号。git grep
旧版本号,以确保它只出现在变更日志中。将此新版本的readme.md
中的当前更改日志条目从unreleased更改为当前日期。 - 建立文档。如果添加了任何新模块,请将它们添加到
docs/source/
中的相应文件中。然后运行/docs/build.sh
git commit-am'发布vx.y'
- 上传到test.pypi.org进行测试。
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
0 - 从test.pypi.org安装python 2和3。
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
1fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
2 - Smoke测试代码在Python2和Python3中轻松加载和运行。
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
3fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
4 要粘贴到解释器中的测试代码:fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
5 - 用git标记发布。在标记消息编辑器中,删除底部生成的注释,将第一行留空(以省略github中的release"title"),将
显著更改
放在第二行,然后将此版本的更改日志内容复制并粘贴到下面。fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
6 - 单击此处在githu上起草新版本b.在标记版本框中输入
vx.y
。保留释放标题为空。将"显著更改"和"更改日志"内容复制到"说明"文本框中。 - 上传到pypi.org!
fromgranaryimporttwitter...tw=twitter.Twitter(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)tw.get_activities(group_id='@friends')
7
相关工作
apache streams是一个类似的项目,可以在存储系统、数据库和社会模式之间进行转换。它是一个Java库,它的设计结构很重。这是它支持的格式列表。它主要由人员模式使用
gnip类似地将社交网络数据转换为activitystreams并支持更多的源网络。不幸的是,它是商业性的,没有免费试用或自助注册,而且计划从500美元开始。
datalift看起来大体上是一样的,只是它们提供了自助服务、随付随付的账单,并且它们使用服务。低">他们自己的专有输出格式而不是activitystreams。它们的目标也更多地是数据挖掘,而不是单个用户访问。
cliqset的feedproxy用于进行这种格式转换,但不幸的是,它和cliqset都死了。
facebook过去一直是官方网站支持activitystreams,但这也没用。
有很多产品可以下载你的社交网络数据,将其规范化,并让你查询和可视化。虽然ssl证书当前已过期,但socialsafe是一个。Thinkup是一款开源产品,但于2016年7月18日关闭。还有从多个源站点提取数据的项目的lifelogging/lifestream聚合器。storytlr就是一个很好的例子。它不包括Facebook或Instagram,但包括一些较小的源网站。还有很多其他插件,例如lifestream wordpress插件。不幸的是,它们通常面向最终用户,而不是开发人员,并且通常不公开库或restapi。
在开源方面,有很多相关的项目。php-mf2-shim将微格式2添加到Facebook和Twitter的原始HTML中。sockethub是一种类似的"polyglot"方法,但更侧重于写作而非阅读。
更改日志
2.0-2019-03-01
中断更改:删除google+,因为它在3月份关闭。值得注意的是,这将删除Google Plus的模块。
- 添加rss 2.0输出!(124)
- 所有筒仓:
- 将用户的主要URL从网站切换到思洛配置文件(\158)。
Github:
- 不要在
<;
/>;
中括起裸露的URL(snarfed/bridge/issues/850" rel="nofollow">snarfed/bridge/850)。 - 多个图片URL的演员和附件的错误修复。
- 没有属性的附件作者对象的错误修复。
- 从Web UI和Rest API中删除,因为消费者Google+正在完全关闭。(更多信息。。
- 从不推荐使用的全局API终结点切换到G+终结点。背景介绍:谷歌博客帖子snarfed/bridgey 846,ython/guide/batch" rel="nofollow">和文档
- Instagram软件: Twitter:
- 将最大视频上载大小从5MB更新为512MB(\162)。
/url
:获取用户的url时返回http 400将导致无限重定向。
1.14-2018年11月12日
添加delete()
。目前包括Twitter和Flickr支持。
- Instagram软件:
- 进行额外的http获取(使用cookie)以获得个人喜好(snarfed/bridgey 840)。
- 更新刮削逻辑以处理feed html更改。
- link@-在评论和照片/视频标题中提及。
Github:
create
/preview\u create
private repo问题和评论的错误修复。- 处理来自rest api的http 410丢失的响应,例如当repo被删除或repo的问题被禁用时。
- 添加
delete()
和preview\u delete()
以删除推文。 - 添加
delete()
和preview\u delete()
以删除照片。 - 微格式2: 原子:
- 在作者URL和电子邮件地址中编码
&;s。(感谢sebused!)
- 添加
跟随
支持。
1.13-2018年8月8日
-
Twitter:
- 支持ISO 8601格式的created_at timestamps,归档文件下载使用的是以及来自API的RFC 2822。
- <代码>CREate()和
preview_create()
:支持rsvps。将它们作为带有rsvp内容的普通tweets发送。(snarfed/bridgey 818) create()
和preview_create()
:通过as1displayname,支持图像的alt文本。(snarfed/bridgey 756)。
- Instagram软件:
- 添加全局速率限制锁以进行刮削。如果一个scraping http请求得到429或503响应,我们拒绝对5m发出更多请求,而是短路并返回相同的错误。这可以用一个新的
ignore_rate_limit
kwarg覆盖到get_activities()
Github:
- 添加全局速率限制锁以进行刮削。如果一个scraping http请求得到429或503响应,我们拒绝对5m发出更多请求,而是短路并返回相同的错误。这可以用一个新的
- 添加
标记
支持
创建
/
预览创建
将标签添加到现有问题(snarfed/bridge 811)。
- 在
create()
和preview\u create()
中的内容中转义HTML字符(<;
,>;
,和&;
)(snarfed/bridgey)。 get_activities()
和get_comment()
现在分别返回格式错误的活动id
和注释id
参数,而不是断言错误。
get_activities()
Bug fix for issues/prs无正文文本。- 从graphql切换到rest api以创建注释和响应,因为graphql在许多org repo上都会遇到授权错误。(snarfed/bridgey 824)
- 改进对评论和用户的graphql支持。
- 必要时缩短提要标题并将其省略号(\144)。
- 微格式2:
- 升级mf2py以改进一些功能,如隐含的p-name检测和空白处理(\142,修复"145,snarfed/bridgey,snarfed/bridgey)。
- 在
<;img>;
标记中支持alt
属性(snarfed/bridgey)。
1.12-2018年3月24日
- 添加Python3支持!Granary现在需要Python2.7+或Python3.3+。
- Instagram软件:
- 修复刮削配置文件页。
Twitter:
- 更新字符计数以处理twitter的更改,该更改现在自动链接allcctlds。背景。
- 用已删除的问题和报告修复
get_activities()
的错误。 - 微格式2:
object_to_json()
:将标记转换为类别中的简单字符串
属性,而不是完全嵌套的对象,如h-card
s(\141)。- 响应回购协议或其
/issues
url的特殊情况GitHub问题是objectTypeissue
- 在HTML输出中呈现简单的字符串类别。
这个版本故意很小,范围有限,以包含python 3迁移的任何影响。它应该是现有Python2用户的noop,我们已经泰德说得很清楚,但我肯定还是有虫子。如果您发现任何损坏,请提交问题!
1.11-2018-03-09
- 添加github!
- 脸谱网:
- 支持新的重复AKA多实例事件。
create()
和preview\u create()
现在只支持对多实例事件的单个实例的rsvps,以匹配facebook api本身。 - 努力寻找原始(完整)大小的照片url,特别是
.jpg
文件,而不是.jpg
create()
修复带有Unicode字符的照片和图像URL的错误。- 修正了
获取活动(用户id=…)
包含经过身份验证的用户自己最近的照片、相册和新闻发布的错误。
- 支持新的重复AKA多实例事件。
- Instagram软件:
- 从刮取的配置文件页中提取更多用户(
作者
)数据。 - 修复主页提要刮擦。
- 从刮取的配置文件页中提取更多用户(
- 微格式2,原子:
- 为图像附件添加附件。
- 修复了在共享和附件中呈现图像、视频和音频附件的错误。重复数据消除图像。
- 微格式2:
- 只处理简单字符串的作者属性。
- 添加
fetch_mf2
kwarg tojson_to_object()
用于通过http获取附加页以确定作者身份。 - 在HTML中生成显式的空白p-name,以防止出现旧的有缺陷的p-name处理(http://microformats.org/wiki/microformats2-implied-properties" rel="nofollow">隐式p-name处理)。
- 修正了
activity-to-json()
和activities-to-html()
中的动词处理(\134)。 - 记住哪些内容包含HTML,保留其中的换行符,不要将这些换行符转换为
<;br>;
s(\130)。
原子:
- 修正
updated和
published中的时区错误
- JSON源:
- 如果标题与内容相同,则省略标题。(通常由微格式2的隐含
p-name
逻辑引起。)
- 如果标题与内容相同,则省略标题。(通常由微格式2的隐含
1.10-2017年12月10日
- 将网站和rest api移动到granary.io!granary demo.appspot.com现在301重定向。 Twitter:
- 将发布字符限制更新为280。背景。
- 修复预览版中的a错误创建自动链接@-在URL中提及,例如medi嗯,帖子。
- 在
get_activities()
等中支持视频和动画gif。 - Instagram软件:
- 将cookie query param添加到rest api中,以允许对登录到用户提要中的内容进行抓取。
- HTML(包括Atom内容):
- 更频繁、更一致地呈现图像、视频和音频附件。
- 包括微格式2
U-photo
,U-video
,以及更经常、更一致地U-audio
类。
原子:
- 添加
atom_to_activities()
以转换完整的feed文档。 - 添加到rest api和web ui。
- 在
rel=alternate
链接以及actor/author url中包含源url(\151)。 - JSON源:
- 修复某些情况下省略标题的错误(122)。
1.9-2017年10月24日
- 添加activitystreams 2.0!新的
AS2
模块包括到@AS1()
和从@AS1()
函数。当前支持:文章、便笺、回复、喜欢、转发、事件、RSVP、标记、附件。
原子:
- 添加新的
Atom to_activity()
函数,用于将Atom转换为AS1。 - 将电子邮件字段添加到作者(如果提供)。
- JSON源:
- 错误(非dict)输入时出现raise valueerror。
- rest api:
- 为
format
和input
添加as2
值。将现有的activitystreams和microformats2值名称修改为as1
,as1 xml
,以及mf2 json
。旧值activitystreams
,json
,json-mf2
,以及xml
仍被接受,但已弃用。
- 为
1.8-2017年8月29日
- 添加对库和rest api的支持。 Twitter:
- 添加
get_blocklist()
- 用于创建视频URL的回复、收藏夹或转发的错误修复,例如https://twitter.com/name/status/123/video/1" rel="nofollow">https://twitter.com/name/status/123/video/1
- 用于解析收藏夹HTML以处理Twitter端的小更改的错误修复。
post_id()
现在在返回id之前更严格地验证它们。- 脸谱网:
- Instagram软件:
- 更新scraping以处理新的主页(ie news feed)json模式,该模式在2017年2月27日左右发生了变化。(个人资料页和个人照片/视频永久链接尚未更改。)
- 微格式2:
- 将
u-featured
添加到activitystreamsimage
- 改进对h-event的支持。
- 当将位置呈现为HTML时,小的空白改变(添加了
)。
post_id()
现在在返回id之前更严格地验证它们。- 修正在ActivityStreams和MF2之间转换经纬度的错误。
谷歌+:
- 将
- 更新html抓取以处理更改的序列化json数据格式。
- 添加新的
activity_to_atom()
函数,该函数将呈现一个顶级的<;entry>;
,而不是<;feed>;
。 - 添加新的
reader
query param,用于切换特定于feed readers的呈现决策。现在,只影响位置:当reader=true
(默认值)时在内容中呈现,当reader=false
(默认值)时省略。 - 在呈现附加文章和注释(例如引用tweets)时,请包括作者姓名。
- 只有当元素具有值时,才包括as
activity:object type
和activity:verb
元素。 - 如果内容中没有图像和MF2 U-photo,则渲染为图像和MF2 U-photo。
- render
thr:响应
from
object.in reply to
以及activity.context.inreplyto
- rest api:
- 修复HTML=>;JSON-MF2和HTML=>;HTML转换中的错误。
- 将brevity升级到0.2.14,以修复一对错误修复程序
1.7-2017年2月27日
- 微格式2:
- 将h-cite和u-quotation-of(实验性)解释为附件,例如引用tweets。
- 将音频和视频属性转换为附件。
Twitter:
- linkify@-在
preview\u create()
中提到和标记 - 支持从带有twitter url的附件创建引用tweets。
- 将quote tweets转换为as时,请从文本末尾删除quoted tweet url。
- 传递
get_activities()
但不传递search_query
时引发值错误 - Instagram软件:
- 改进HTML抓取错误处理。
- 支持多照片/视频帖子
- 脸谱网:
- 禁用创建"感兴趣"的RSVP,因为Facebook的API不允许它。
原子:
- 支持音频和视频附件的媒体附件。
- source.get_activities():开始对错误的参数值引发valueerror,特别是无效的facebook和twitter id以及instagram搜索查询。
- 修复用Unicode高代码点(即16位基本多语言平面之上)呈现和链接内容的问题,包括一些emoji,在Python2的"窄"版本上使用
--enable unicode=ucs2
,这是Mac OS X、Windows和旧的*nix上的默认设置。
1.6-2016年11月26日
-
Twitter:
- 处理新的"扩展"tweets,隐藏对@提到的回复并跟踪 媒体、引用推文等的URL背景: https://dev.twitter.com/overview/api/coming-changes-to-tweets
- 错误修复:确保like.author.displayname是一个普通的unicode字符串,以便 可以正常进行pickle操作,例如通过app engine的memcache。
- 错误修复:在Favorites_html_to_likes()中正确处理带有表情符号的名称。
- 错误修复:使用Unicode字符处理搜索查询。
- 在引用tweets的转发中呈现完整的原始引用tweet。
- 微格式2 HTML:
- 可以选择跟随并获取rel="author"链接。
- 改进微格式2和ActivityStreams"photo"类型之间的映射。(mf2"photo"类型是带有照片的注释或文章,但作为"photo"类型,则是照片。因此,将mf2照片映射到没有照片的底层类型。)
- 支持H-Card以外的位置属性,例如H-ADR、H-GEO、U-GEO,甚至 当纬度和经度等属性出现在顶层时。
- 错误处理:对于非json api响应返回http 502,对于连接失败返回504。
1.5-2016年8月25日
- rest api:
- 支持用户id、应用id和活动id的标记uri。
Twitter:
- 上传不支持类型的照片时会出现更好的错误信息。
- 只包括原始的引用推文,不包括它们的转发。
- 跳过获取受保护帐户的转发,因为API调用始终为403。
- 更好的用户名检测。flickr的api在用户名方面非常不一致 vs实名vs路径别名。这特别检测用户名 可能是真的,因为它有一个空格。
- 上载:检测并处理应用程序引擎的10MB HTTP请求限制。
- 创建中的错误修复:处理照片/视频描述中的Unicode字符, 标签和注释文本。
- 错误修复:在附件文本中转义(如引用tweets)。
- 错误修复:处理ActivityStreams 1活动中的多值"对象"字段。
- 将创建注释和反应从graphql切换到rest api(bridge 824
1.4.1-2016年6月27日
- 将OAuth Dropins要求提高到1.4。
1.4.0-2016年6月27日
- rest api:
- 默认情况下,缓存思洛存储器的请求为5米,instagram的请求为60米,因为它们会积极阻止抓取。您可以使用新的cache=false查询参数跳过缓存。
- 脸谱网:
- 从api v2.2升级到v2.6。https://developers.facebook.com/docs/apps/changelog
- 添加反作用力支撑。
- 按用户对事件rsvps进行重复数据消除。
Twitter:
- 切换create()以使用简洁性计算字符数。https://github.com/kylewm/brevity
- 修正create()中偶尔错误转义的.,+,和-字符的错误。
- 修复有多张照片/视频时的文本呈现错误。
- 在回答自己的问题时,不要加上"自我"一词。
- Instagram软件:
- 修复刮削中的错误。
- 升级至requests 2.10.0和requests toolbelt 0.60,后者支持app engine。
1.3.1-2016年4月7日
- 更新oauth dropins对1.3的依赖性oauth dropins
1.3.0-2016年4月6日
- 支持发布视频!目前在Facebook、Flickr和Twitter上。
- Instagram软件:
- 添加对刮削的支持,因为它们会锁定自己的api并需要手动批准。
- linkify@-在图片标题中提到。
- 脸谱网:
- 获取打开图形故事aka
news.publish
操作。 - 许多照片贴的错误修正:更好的隐私检测,修正错误贴上评论的错误。
Twitter:
- 获取打开图形故事aka
- 处理所有附加到推特的照片/视频,而不仅仅是第一个。
- 停止获取对@-提及的答复。
- 呈现附件。
- 添加
xml:base
- 微格式2:
- 加载并转换H卡。
- 使用mf2util实现完整的post类型发现算法。https://indiewbcamp.com/post-type-discovery
- 放弃对H-AS-*类的支持,包括传入和传出。它们不赞成后类型发现。
- 删除旧的不推荐的
u-like代码>和u-repost属性。
- 其他错误修复。
- 准备工作服。
1.2.0-2016年1月11日
- 改进原始的后发现算法。(新娘51)
- Flickr调整。(新娘466)
- 将mf2、activitystreams、atom和search添加到交互式ui。(31,29)
- 改进后类型发现(使用mf2util)。
- 从配置文件中的所有字段中提取用户网站链接(例如,描述/生物)。
- 将捏造的片段添加到comment/like permalinks(例如,like-by-user123)中,以便对象url始终是唯一的(多个思洛存储器)。
- 在创建/预览(多个思洛存储器)中改进格式/空白支持。 谷歌+:
- 添加搜索。
- 脸谱网:
- 在"获取"活动中获取更多信息:照片、活动、RSVP。
- 在创建/预览中支持个人标签。
- 通过将照片上载到"时间线照片"相册,防止Facebook自动整合照片帖子。
- 在创建/预览中包含标题。
- 改进对象ID解析/解析。
- 改进标签处理。
- 获取嵌套注释的错误修复。
- 其他改进,API错误/片状处理。
Flickr:
- 创建/预览对照片、评论、收藏夹、标记、个人标记、位置的支持。
- 创建/预览位置、多张照片的支持。
- 获取报价推文。
- 获取用户提到的改进,错误修复。
- 固定嵌入。
- MISC作为转换改进。
- 微格式2:
- 改进like和repost渲染。
- 其他错误修复。
- 设置圆圈。
1.1.0-2015年9月6日
- 添加Flickr。
- 脸谱网:
- 获取多个ID格式,例如带有或不带有用户ID前缀。
- 支持线程注释。
- 从/posts api端点切换到/feed。
谷歌+:
- 支持将plus.google.com HTML转换为ActivityStreams。
- Instagram软件:
- 支持位置。
- 改进原始的后发现算法。
- 新徽标。
1.0.1-2015年7月11日
- Atom模板渲染的错误修复。
- Facebook,Instagram:支持访问令牌参数。