Keen IO的Python客户端

keen的Python项目详细描述


Keen IO正式的Python客户机库
==



构建状态PYPI版本

这是"Keen IO<;https://keen.io/>;` API"的正式Python客户机。Keen IO API允许开发者直接在应用程序中构建分析功能。

请继续关注改进!

安装
----


使用PIP安装!

::


pip install keen

必须配置Keen IO项目ID及其访问
密钥(如果需要帐户,请在此处注册<;https://keen.io/>;`-免费)。

运行查询时需要设置读键。建议通过环境设置此配置信息。
您可以设置的密钥有"Keen_Project_ID"、"Keen_Write_Key"、"Keen_Read_Key"和"Keen_Master_Key"。
根据"最小权限原则"https://en.wikipedia.org/wiki/Principle_Last_Privilege>;`如果没有必要,建议您不要使用master_密钥。此sdk将期望并使用给定操作的精确键,并在误用的情况下抛出
异常。


如果由于某种原因不想使用环境变量,可以直接按如下方式设置值:

。代码块:pythone<;高级用法>;``下面的部分。

代码块::python

keen.add廑event("sign廑ups",{
"username":"lloyd",
"refered廑by":"harry"


data enrichment
`````````````````````````````
data enrichment是一个强大的插件,它可以通过pre pro丰富您已经流到keen io的数据处理数据并添加有用的数据属性。要激活外接程序,只需在事件的"keen"命名空间中添加一些新属性。我们的附加组件配置的详细文档可在"here<;https://keen.io/docs/api/python data enrichment>;`代码块:python

keen.add_event("请求",{
"页面URL":"http://my-website.com/cool/link?source=twitter&foo=bar/title",
"keen":{
"addons":[
{
"name":"keen:url撸parser",
"input":{
"url":"page撸url"
},
"output":"parsed撸page撸url""
}
]
}
}


Keen IO将为您解析URL,这相当于:

……代码块:python

keen.add_event("请求",{
"页面URL":"http://my-website.com/cool/link?source=twitter&foo=bar/title",
"解析的页面URL":{
"协议":"http",
"域":"my website.com",
"路径":"/cool/link",
"锚":"title",
"查询字符串":{
"source":"twittetr",
"foo":"bar"
}
}
}
}


下面是使用"dateti"的另一个示例。me parser<;https://keen.io/docs/api/?Shell"日期时间分析器"。假设您想在一周中的每一天(星期一、星期二、星期三等)对"购买"事件和其他有趣的日期时间组件进行更深入的分析。您可以自动使用事件中包含的"keen.timestamp"属性。代码块::python

keen.add廑event("purchases",{
"keen":{
"addons":[
{
"name":"keen:date廑time廑parser",
"input":{
"date廑time":"keen.timestamp"
,"output":"timestamp廑info"
}
]
>
},
"price":500




其他数据扩展插件位于"api参考文档"http://keen.io/docs/api/api/python/data enrich>;` ` ` ` `````````````````````````````````````````````````````````````````````````````````````````


><500其他数据扩展插件,其他数据扩展插件也都位于`` api参考文档……代码块::python

上载4个事件,总共-2个到"注册"集合,2个到"购买"集合
keen.添加事件({
"注册":[
{"用户名":"nameuser1"},
{"用户名":"nameuser2"}
],
"购买":[
{"价格":5},
{"价格":6}
]
}




就这样!运行代码后,请检查Keen IO项目,查看是否添加了事件。

使用Keen IO进行分析
````````````````````````````````````

以下是一些查询示例。假设您已经在"purchases"集合中添加了一些事件。
有关更多代码示例,请查看Keen的"docs<;https://keen.io/docs/api/?巨蟒代码块::python

keen.count("购买",timeframe="this_14_days")=>;100
keen.sum("购买",target_property="price",timeframe="this_14_days")=>;10000
keen.minimum("购买",target_property="price",timeframe="this_14_days")=>;20
keen.maximum("购买",target_property="price",time"frame="这14天")=>;100
keen.average("购买",target_property="价格",timeframe="这14天")=>;49.2


keen.sum("购买",target_property="价格",group_by="item.id",timeframe="这14天")=>;[{"item.id":123,"结果":240},{……}]

keen.count_unique("购买",target_property="user.id",timeframe="this_14_days")=>;3
keen.select_unique("购买",target_property="user.email",timeframe="this_14_days")=>;["bob@aol.com","joe@yahoo.biz"]

现在支持alpha命令结果并限制返回的内容在python sdk中,
请记住,即使使用"limit"关键字限制结果,您仍在查询
正常数量的数据,因此计算成本不会改变。limit只更改显示的内容。

关键字"limit"必须是正整数。关键字"order_by"必须是指定了必需的
"property_name"和可选的"direction"的字典。"方向"可能是敏锐的方向。下降或
敏锐的方向。上升。如果未提供"方向",则使用升序。在"按顺序排列"字典中不能使用其他关键字


如果您提供"订单依据",则只能使用"限制"。

排序依据={"属性名称":"结果","方向":keen.direction.descending})

keen.extraction("购买",timeframe="today")=>;[{"价格"=>;20,…},{…}]

Keen.多重分析(
"购买"
"分析={
"总计":{
"分析类型":"总计"
"目标属性":"价格"
},
"平均":{
"分析类型":"平均"
"target_property":"price"
}
},
timeframe='this_14_days'
){"total":10329.03,"average":933.93}


step1={
"event_collection":"sign_ups",
"actor_property":"user.email"
}
step2={
"event_collection":"purchases",
"actor_property":"user.email"
}
keen.funnel([step1,step2],timeframe="today")=>;[2039201]



要从漏斗分析返回完整的api响应(而不是单一的"result"键),请设置`所有密钥=true`.

例如,"keen.funnel([step1,step2],timeframe="today",all\u keys=true)"将返回"result"、"actors"和"steps"密钥。

delete events
````````````````

keen io api允许您"删除事件"<;https://keen.io/docs/api/\delete events>;`ufrOM事件集合,可选地提供筛选器、时间范围或时区,以缩小要删除的内容的范围。


您需要设置主密钥。

……代码块::python

keen.delete_events("event_collection",filters=[{"property_name":"username","operator":"eq","property_value":"bob}])

advanced usage
```````````````````````````

当你批量上传事件时,有些可能成功,有些可能出错。keen api返回每一个的信息。这里有一个例子:

upload code(记住,keen io不允许在属性名中使用句点):

…代码块::python

response=keen.add_events({
"注册":[
{"用户名":"nameuser1"},
{"用户名":"nameuser2","an.invalid.property.name":1}
],
"购买":[
{"价格":5},
{"price":6}
]
}


>该代码将导致以下api json响应:

……代码块::javascript

{
"注册":[
{"成功":true},
{"成功":false,"错误":{"名称":"部分错误名称","说明":"部分长描述"}
],
"购买":[
{"成功":true},
{"success":true}
]
}


so在python中,要检查批处理的结果,您需要这样的代码:

……代码块::python

batch={
"注册":[
{"用户名":"nameuser1"},
{"用户名":"nameuser2","an.invalid.property.name":1}
],
"购买":[
{"价格":5},
{"价格":6}
]
}
response=keen.add_events(batch)

print("事件出错!集合:'{}'。事件正文:'{}'。格式(collection,batch[collection][事件计数])
事件计数+=1

配置唯一客户端实例
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

如果要从同一python文件中的不同项目发送事件或查询,则需要设置
唯一的客户端实例(每个项目一个)。您可以通过分配一个keenc实例来实现这一点对这样的变量留置:

…代码块:python

ge



client\hike=keenclient(
project\u id="xxxx",\u收集徒步旅行数据的项目id(与上面的不同)
write\u key="yyyy",
read\u key="zzzz",
master/>
您可以发送这样的事件:

…代码块::python


代码块:python

client.count(…)



shell保存了来自python客户机的查询。代码块::python

/>)

nt",
"事件集合":"购买",
"时间范围":"本周",
"筛选":[{
"属性名称":"价格",
"运算符":"gte",
"属性值":1.00
}]
}
}

客户端.保存的查询.创建("保存的查询名称",保存的查询属性)


lient.saved_querys.results("saved query name")

任何未发送的属性都将被解释为被清除/删除。这意味着通过另一个客户机(包括projects explorer web ui)设置的属性将以这种方式丢失。
为此,它将首先检索现有的查询定义
,这意味着将有两个http请求。在已经具有完整查询定义的代码中使用update_full(),该定义可以合理地认为是当前的。

ATE("已保存的查询名称",{"刷新率":14400})

……使用完全更新,如果我们已经获取了查询定义:
已保存的查询属性["刷新率"]=14400
客户端.已保存的查询.完全更新("已保存的查询名称",已保存的查询属性)

将查询保存到新的资源名称…

…使用部分更新:
客户端.保存的查询.更新("保存的查询名称",{"查询名称":"缓存的查询名称"})

…使用完全更新,如果我们已经获取了查询定义,或者将其放置在
的位置原因。我们再次发送"刷新率",以及整个定义否则,它将被重置:
保存的查询属性["查询名称"]="缓存的查询名称"
客户端。保存的查询。更新完整的("保存的查询名称",保存的查询属性)

删除保存的查询(使用新的资源名称,因为我们刚刚更改了它)
客户端。已保存的查询。删除("缓存查询名称")



覆盖事件时间戳



属性"keen.timestamp"
和"keen.created\u at"在记录事件时设置。您可以覆盖
keen.timestamp属性。这可能很有用,例如,如果您正在回填历史数据。请务必使用"ISO-8601格式"https://keen.io/docs/event data modeling/event data intro/"ISO-8601-format">

…代码块::python

keen.add廑event("sign廑ups",{
"keen":{
"timestamp":"2012-07-06t02:09:10.141z"

"username":"lloyd",
"refered廑by":"harry"



默认情况下,GET请求在305秒后超时。如果您想手动覆盖它,可以使用"get_timeout"参数创建一个keenclient。如果服务器在指定时间内未返回
字节,则此客户端将无法获取。例如:

…代码块::python

愤怒()到100秒后超时。如果达到此超时
限制,将引发一个requests.timeout。由于请求库中的错误,您可能还会看到一个
sslerror(` 1294<;https://github.com/kennethreitz/requests/issues/1294>;` `)


如果您想手动覆盖它,可以使用"post_timeout"参数创建一个keenclient。如果服务器在指定时间内未返回
字节,则此客户端将无法发送邮件。例如:

…代码块:python

如果达到此超时限制,将引发请求超时。由于请求库中存在错误,您可能还会看到sslerror(https://github.com/kennethreitz/requests/issues/1294)

create access keys
"create access keys"
"create access keys"
…代码块::python

from keen.client import keenclient
er_key="zzzz"
)创建访问密钥。请参阅:https://keen.io/docs/access/access keys/自定义您的访问密钥
客户端。创建访问密钥(name="dave懔barry懔key",is懔enabled=true,permitted=["writes","cached懔queries"],
选项={"cached懔queries":{"allowed":["dave懔barry懔in懔cyberspace懔sales"]})

显示与此客户端项目相关联的所有访问密钥。
client.list\u access\u key s()

获取有关特定访问密钥的详细信息。
client.get_访问密钥(访问密钥id="abcdefghijklmnopqrstuvwxyz")

tuvwxyz")

当前包含"写入"和"缓存的查询"。
fghijklmnopqrstuvwxyz",permissions=["querys"])

icitly remove here.
因此我们将从集合中同时删除"writes"和"querys",只保留"cached_u querys"。
("writes","cached_u querys","querys")-("writes","querys")=("cached_u querys")
客户端。删除"access_key_"权限(access_key id="abcdefghijklmnopqrstuvwxyz,"permissions=["writes","querys"])

此函数调用的权限。
("缓存的查询")替换为("写入")=("写入")
客户端。更新访问密钥权限(访问密钥id="abcdefghijklmnopqrstuvxyz",权限=["写入"])

r/>client.update_access_key_options(access_key id="abcdefghijklmnopqrstuvxyz",options={"writes":{
"autofill":{
"customer":{
"id":"93iskds39kd93id",
"name":"ada corp."
}
}
}

#用此处提供的内容替换除密钥ID以外的所有内容。
如果此处未提供字段,则将其设置为空值。
在这种情况下,不提供任何选项,因此将删除所有选项。
client.update_access_key_full(access_key id="abcdefghijklmnopqrstuvwxyz,"name="strong_bad",is_active=true,permitted=["querys"])




create scoped keys(**deprecated**)
'''''''''''''''''''''

python客户机允许您轻松创建"scoped keys"<;https://keen.io/docs/security/';scoped key>;`,但访问密钥更好!
如果出于传统原因,您仍然需要使用它们,请使用以下方法:

…代码块::python

ns":["read"]})



`write_key`和`read_key`现在包含基于主api密钥的作用域密钥。


testing
----


to run tests:






--


5.1。请参阅完整的更改日志"here<;/changelog.rst>;`.



我们很想听听你的反馈和想法!

有助于是一个开源项目,我们喜欢来自社区的参与!向我们提出请求和问题。

`了解有关为此项目贡献的更多信息<;/contribution.md>;` `.

…|构建状态图像::https://img.shields.io/travis/keenlabs/keenclient-python.svg?maxage=600
:目标:http://travis ci.org/keenlabs/keenclient python
:alt:build status

…| Pypi版本图像::https://img.shields.io/Pypi/v/keen.svg?maxage=600
:目标:https://pypi.python.org/pypi/keen/
:alt:keen on pypi

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java爬虫获取外部网站搜索结果   java Bluestack未连接到eclipse   java如何从ConstraintViolationException Hibernamte获取数据库字段名   HttpResponse HttpResponse=httpClient引发java运行时错误。执行(httpPost);   Jama中矩阵的java点积和叉积   java有什么方法可以唯一地识别可扩展设备吗?   java我需要用*来写我的名字,但我不断遇到一个错误,我对编码很陌生   java变量是在内部类中访问的。需要被宣布为最终决定。但我不想宣布最终结果   java如何缩短base64图像字符串,Android?   JavaSpringMVC:计划方法不自动触发   图形学习Java 2D API的好资源是什么?   如何在java中对方法进行排队   java JavaFX多行   java Selenium无法在[链接]上找到基于CSS元素的密码字段元素http://www.cartasi.it/gtwpages/index.jsp   Java中的equals()和hashCode()契约   软删除情况下的java Hibernate二级缓存   java为什么这段代码要两次调用这些方法?