跳转到主要内容

管理Google Alerts的Python库

项目描述

简介

galerts是一个用于管理Google Alerts的Python客户端。目前它依赖于从Google的网页界面抓取HTML,因为目前还没有公开的API。如果他们决定发布一个,galerts将切换到使用它。

如果您有任何问题或希望合作,请访问github上的galerts

使用方法

首先为给定帐户创建一个警报管理器

>>> import galerts
>>> gam = galerts.GAlertsManager('cornelius@gmail.com', 'p4ssw0rd')

(注意:明文密码仅用于获取会话cookie,即它通过安全连接发送然后丢弃。)

现在您可以通过alerts属性访问该帐户的现有警报,该属性提供了一个生成器,您可以用来迭代相应的Alert对象

>>> list(gam.alerts)
[<Alert for "Corner Confectionary" at ...>]

看起来我们有一个现有的警报,但它有一个拼写错误。让我们修正它

>>> alert = next(gam.alerts)
>>> alert.query
u'Corner Confectionary'
>>> alert.query = 'Corner Confectionery'
>>> alert
<Alert for "Corner Confectionery" at ...>

到目前为止,我们只更改了内存中的值;在Google看来,警报仍然具有旧值

>>> list(gam.alerts)
[<Alert for "Corner Confectionary" at ...>]

要将结果保存到Google,请执行以下操作:

>>> gam.update(alert)

现在它应该已经更新了

>>> list(gam.alerts)
[<Alert for "Corner Confectionery" at ...>]

你可能已经注意到,Alert.query属性返回一个unicode值。Google允许带有非ASCII字符的警报查询,因此我们通过unicode支持这一点。为了方便,你可以将Alert.query设置为字符串而不是上面我们使用的unicode,它将自动转换为unicode;只需确保unicode(yourstring)不会失败。

如上所示,每次你访问gam.alerts时,GAlertsManager都会向Google请求你的警报并创建带有Google返回信息的新的Alert对象。当我们每次访问gam.alerts时,可能有一个对象代表一个警报,我们可以保留并操作这个对象,同时管理器继续创建代表相同警报的新对象。由gam.alerts返回的警报应被视为在请求时Google拥有的信息的快照,而不是作为保持最新状态的数据的规范表示。 Alert对象是一次性的;它们仅仅用来封装一些字符串属性。因此,你可以将任何旧的Alert对象传递给gam.update,管理器将会告诉Google更新其信息以匹配传递的对象。Alert.__eq__已被重写,以便具有相同属性值的两个不同的Alert对象进行比较。

记住这一点,让我们回到我们旧的Alert对象。假设我们想更改一些其他属性

>>> alert.type
'Blogs'
>>> alert.deliver
'Email'
>>> alert.feedurl # we expect this to be None since it's an email alert
None
>>> alert.freq
'once a week'
>>> alert.type = galerts.TYPE_COMPREHENSIVE
>>> alert.deliver = galerts.DELIVER_FEED

我们已经将警报提供的结果类型从仅博客更新更改为全面的组合,并更改了交付方式,现在将通过订阅源而不是电子邮件提供结果。

在我们将这个Alert对象传递给gam.update后,我们的更改应该会保持,但如果我们想知道警报的feed的URL,我们必须获取一个新的Alert对象。

>>> gam.update(alert)
>>> alert.feedurl # this is now stale
None
>>> oldalert = alert # so get a fresh one
>>> alert = next(gam.alerts)
>>> alert.feedurl # and now it's up-to-date:
'http://www.google.com/alerts/feed/...'
>>> alert == oldalert # feedurls don't match
False

其他属性保持不变

>>> alert.query
u'Corner Confectionery'
>>> alert.type
'Comprehensive'
>>> alert.deliver
'feed'

不过,当我们把电子邮件警报改为订阅源警报时,Google会自动将警报频率更改为“实时”,因为新结果会在找到时实时添加到订阅源中。新的警报对象的freq属性反映了这一点

>>> alert.freq
'as-it-happens'
>>> oldalert.freq # stale
'once a week'

假设我们不再想要这个警报。要删除它,请执行以下操作

>>> gam.delete(alert)
>>> list(gam.alerts)
[]

然后创建一个新的警报

>>> query = 'Cake Man Cornelius'
>>> type = galerts.TYPE_COMPREHENSIVE
>>> gam.create(query, type)
>>> list(gam.alerts)
[<Alert for "Cake Man Cornelius" at ...>]

注意,我们没有指定我们想要电子邮件警报还是订阅源警报。在这种情况下,GAlertsManager默认创建订阅源警报。如果我们想创建电子邮件警报,我们可以传递额外的关键字参数feed=False和一个可选的交付频率freq,如果我们想使用默认以外的“实时”。

让我们演示将我们创建的订阅源警报更改为电子邮件警报

>>> alert = next(gam.alerts)
>>> str(alert)
'<Alert query="Cake Man Cornelius" type="Comprehensive" freq="as-it-happens" deliver="feed">'
>>> alert.feedurl
'http://www.google.com/alerts/feed/...'
>>> alert.deliver = galerts.DELIVER_EMAIL
>>> alert.freq = galerts.FREQ_ONCE_A_DAY
>>> gam.update(alert)

现在

>>> alert = next(gam.alerts)
>>> str(alert)
'<Alert query="Cake Man Cornelius" type="Comprehensive" freq="once a day" deliver="Email">'
>>> alert.feedurl
None

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。

源分布

galerts-0.1.5.tar.gz (99.7 kB 查看哈希值)

上传时间

由以下机构支持