OpenBlock的数据抓取基础设施(Django的本地新闻)
项目描述
ebdata
编写脚本的代码,以从Web导入/抓取/解析数据到 ebpub,以及从(英文)文本中提取(美国)街地址。
此软件包是OpenBlock的一部分。最初是为EveryBlock.com开发的。
问题可以通过 问题跟踪器 报告。
讨论在 ebcode google group 或freenode上的#openblock频道。
安装
不要 仅尝试easy_install或pip install ebdata。它有许多特定的依赖项,这些依赖项无法/不应通过setup.py捕获。
相反,请参阅完整的文档,网址为 http://openblockproject.org/docs/install/index.html,其中包括pip要求文件的链接以及准备您的系统说明。
OpenBlock
OpenBlock是一个Web应用程序和RESTful服务,允许用户浏览和搜索其本地区域以查找“超本地新闻” - 看看最近在直接地理区域内发生了什么。
有关安装说明和其他文档,请参阅 http://openblockproject.org/docs/(或docs/目录中的.rst文件)。
有关帮助,您可以尝试ebcode组: http://groups.google.com/group/ebcode 或在irc.freenode.net上的#openblock IRC频道中查找我们。
关于项目
OpenBlock起源于2009年6月Everyblock.com发布的开源代码。最初由Adrian Holovaty和Everyblock团队创建,现在作为开源(GPL)项目由OpenPlans开发,详情请访问http://openblockproject.org。
Everyblock的初始创建和OpenBlock的持续开发资金由Knight Foundation提供(http://www.knightfoundation.org/)。
OpenBlock 1.2.0(发布于2012年5月23日)
升级说明
如往常一样,安装所有依赖项,例如如果您正在升级源代码检查
pip install -r ebpub/requirements.txt pip install -e ebpub pip install -r ebdata/requirements.txt pip install -e ebdata pip install -r obadmin/requirements.txt pip install -e obadmin pip install -r obdemo/requirements.txt pip install -e obdemo
如往常一样,同步和迁移数据库
django-admin.py syncdb django-admin.py migrate
在本版本中,Block模型和导入脚本有一些更改,结合使用可以为您提供更好的搜索结果和地理编码。要这样做
运行迁移,如上所述
关闭您的抓取器
备份数据库
使用
–reset
选项重新导入区块(这很重要!),通过管理界面或命令行…请参阅http://openblockproject.org/docs/install/geodata.html#streets-blocks请务必根据文档重新生成街道、区块交叉口和交叉口。
浏览您的网站…除了以前名称晦涩的街道(如“99”或“87”)现在将具有更易识别的完整名称,例如“州道99”或“州际公路87”。
再次启动您的抓取器。
在此过程中,网站应保持运行,尽管某些页面可能会在过程中暂时出现错误,高速公路的URL将更改为包含前缀。
向后不兼容性
已删除外键EmailAlert.block和SavedPlace.block;现在它们具有几何形状,可以用于查找最近的区块。这使得如果您需要重新加载区块数据时更安全。运行迁移将处理现有的警报和已保存的位置,但如果您改变主意,则无法安全降级;请像往常一样备份数据库!(工单#257)
已删除神秘字段Schema.grab_bag、Schema.grab_bag_headline、Schema.intro。(工单#232)
已删除安全_id_sort_reversed模板标签;使用循环的逆序选项代替,例如:{% for item in itemlist|safe_id_sort reversed %}
将友好日期模板过滤器从ebpub.db.templatetags.eb移至ebpub.db.templatetags.dateutils,这似乎是合适的。
将recaptcha模板标签从ebpub.neighbornews.templatetags移至ebpub.db.templatetags.recaptcha_tags。使用它的模板现在需要做{% load recaptcha_tags %}。
将一个神秘的模板标签{% get_locations_for_item %}从ebpub.widgets.templatetags移至ebpub.db.templatetags.recaptcha_tags。使用它的模板现在需要做{% load eb %}。
将许多模板标签函数重命名为与标签名称匹配,例如“do_filter_url()”现在是“filter_url()”。这使得API文档更容易阅读;它不影响模板,只影响直接导入这些函数的代码 - 而且可能没有这样的代码。
在Schema过滤页面添加了“在地图上查看所选项目”链接和复选框,允许在“大地图”上查看显式选定的项目。
更改了schema_filter视图使用的URL,因此某些书签可能会损坏。(工单# 266)
已删除EB_MEDIA_ROOT和EB_MEDIA_URL设置;现在使用django的正常MEDIA_ROOT和MEDIA_URL。
已删除ImproperCity异常,它只用于防止在县的非合并部分等地方使用区块,那里没有什么可以称为“城市”的东西。
已删除未使用的NewsItem.block字段,是工单#93的一部分。
已删除ebdata/retrieval/scrapers/new_newsitem_list_detail.py,它未在任何地方使用。
已删除ebpub/streets/blockimport/tiger/import_blocks2010.py。现在,2010年人口普查文件由主import_blocks.py脚本支持。
从Widgets上下文中删除了item.intersecting;它从未得到适当的文档说明。相反,请使用新的get_locations_for_item模板标签。
已删除旧地图JavaScript,因为我们现在在所有地方都使用openblockrichmap.js。
1.2中的新功能
现在您可以安全地重新导入区块数据。实际上,这强烈推荐,您将获得更好的地理编码结果,因为对#264和#278的修复。
添加了ebpub.utils.geodjango:interpolate()函数,该函数可以找到线性字符串上距离第一个点给定距离(或分数)的点。(由于否则这将需要数据库调用,因此添加了对Shapely的依赖。)
在Streets模型中添加了'prefix',用于类似美国人口普查TIGER数据中的“州公路”之类的用途;如果没有它,我们将遇到地理编码失败、用户界面中的混乱/模糊的街道名称等问题。关闭#264。
现在在admin UI中的位置导入将在后台运行。
现在admin UI提供链接,以在实时网站上查看各种内容(新闻条目、位置、区块、街道、位置类型)。
现在
允许保存空 ;某些事物可能真的只有标题可用。 由于olwidget升级,现在支持多种类型的Yahoo地图。
ebpub.geocoder.base.full_geocode()现在有一个convert_to_block参数,从ebdata.retrieval中提取出来。如果为True,则尝试通过四舍五入到最近的街区来消除良好街道上的不良街区,例如将“299 Wabash St”转换为“Wabash St的200街区”。这可能有助于地理编码,例如,当人口普查数据与现实不符时。
现在模式有了一个
字段,表示用户在创建后可以编辑其内容多长时间(以小时为单位)。由 表单使用。 REST API:允许通过多个类型(模式)进行搜索。
添加了用于从电子表格导入新闻条目的admin UI(目前仅处理CSV和旧式Excel表单;不处理.xslx)(问题#126)
在
中添加了通用的电子表格抓取器(目前仅处理CSV和旧式Excel表单;不处理.xslx)(问题#274) 地址提取回退现在查看所有看起来像文本的标签。 搜索表单现在也搜索地点。
Neighbornews模式现在有可绘制的
。 通过创建一个名为db/schema_filter/
.html的模板,允许根据模式覆盖schema_filter视图的模板。 Neighbornews模式现在有针对schema_filter视图的特定模板。
在
模型上添加了 标志,允许管理员将一些Lookup值指定为“特殊”,用于例如导航。(#268) 添加了
模板标签,将特定模式的“特殊”Lookup值放入上下文中。(#268) 添加了
方法,以找出新闻条目针对特定属性的“特色”Lookup。 添加了
模板标签,将给定db.attribute字段的全部值作为JSON列表输出。 使schema_filter成为模式的默认视图,问题#272
添加了
应用程序,允许用户将新闻条目标记为垃圾邮件或不当内容,以及相应的admin UI;有关更多信息,请参阅 。 添加了
布尔值,以切换每个模式的审核标记。默认情况下在 模式上启用。 现在支持用户上传的图片,并启用于
用户贡献内容模式。 添加了新的
模板,以便您可以覆盖页面右上角的链接。 添加了
模板标签,请参阅<../main/widgets>以获取更多信息。 现在与Postgresql 9.1兼容,问题#262
由于Frank Hebbert,地图控件更美观,问题#225
添加了基于任意请求数据的复杂钩子来过滤模式;通过将 settings.SCHEMA_MANAGER_HOOK = 'some_module:some_function' 赋值来实现,其中 some_module.some_function 函数接受参数 (request, manager) 并返回一个 models.Manager 实例,其查询集将返回允许的 Schemas。
将 Vary 头添加到 REST API 响应中,以实现更正确的 HTTP 缓存能力。
在“neighbornews”添加/编辑表单上自动完成分类。
在用户贡献的(“Neighbornews”)添加/编辑表单上可选 ReCaptcha。
用户贡献的内容(“neighbornews”)现在有编辑和删除表单。
大多数 DateFields 和 DateTimeFields 设置了合理的默认值,但仍可覆盖。
注销现在将您重定向到您正在查看的页面。
向 Profile 模型添加一个“properties” JSON 字段,以提供更灵活的每个用户元数据。
用户管理界面现在显示 Profiles 和 API 密钥。
“粘性小部件”或“固定”新闻项:您可以使用管理界面使某些新闻项永久可见或在您设置的过期日期之前可见。
settings.NEIGHBORNEWS_USE_CAPTCHA 现在可以是一个指向函数的字符串路径。
添加了新的 NewsItem.objects.by_request() 方法,用于根据例如用户权限进行过滤。
添加了新的 get_schema_manager(request) 方法,用于根据当前请求进行过滤,并具有可扩展性钩子。
至少将讨厌的地理编码器缓存结果放在管理界面中,以便您可以手动删除(如果需要)。参照 #163。
管理界面选项,可以将模式作为新模式保存副本。
已修复错误。
管理用户不再有文件上传大小的限制。
处理导入其他投影(而非 4326)的地点。感谢 Karen Tracey。参照 #214。
我们现在使用从美国人口普查 TIGER 数据加载的街区的主街道名称,而不是我们看到的最后一个名称,这可能是一个备选名称。问题 #278
导入位置(包括命令行和管理界面)在重新导入相同的地点时不再崩溃。
将 RSS 源 URL 修复为使用 settings.EB_DOMAIN 而不是网站框架获取根 URL,以保持与 OpenBlock 其他部分的兼容性。
在输入时正确归一化街道名称(问题 #166)
如果提供非字符串输入,则 parsing.normalize() 和 text.slugify() 现在不会崩溃。
带有 allow_charting=False 的模式现在在 schema_filter 视图中显示,但不在其地图上。修复了 schema_filter_geojson,现在它们也在地图上显示。
修复了大地图页面上按位置和日期过滤的问题。
修复 #281,大地图页面上显示错误模式。
现在 db.Location 和 streets.PlaceType 的地图图标 URL 可以相对于 STATIC_URL。
修复 #282,地点详情页上缺少项目。
修复当属性引用不存在的 Lookup 时发生的 KeyError。
修复了 FilterChain.add(key, lookup) 中的错误,当 key 不是一个 SchemaField 时。
现在应该可以在 URL 前缀处运行 OpenBlock;已删除所有硬编码的 URL。票据 #90。
修复了“保存地点”按钮上缺失的 AJAX 超时,感谢 Tim Shedor。票据 #269。
修复了 NewsItem.objects.by_attribute() 中的错误,当有多个多对多查找时:寻找 [3,47] 正在找到以 3 开头或以 47 结尾的任何数字。
使 manage.sh 脚本可执行。
修复了当 Block 实例的 block 范围与 block 范围正则表达式不匹配时发生的罕见错误。已知示例:密苏里州哥伦比亚的 1600-7-1600-9 Hanover Blvd.。
当通过查找过滤时,现在可以选择多个值。票据 # 267。
使用查询参数而不是奇怪的 URI 来进行 schema_filter 视图,票据 # 266。
从 schema_filter 页面上删除了虚假的导航路径;票据 #270。
通过 Block 过滤 NewsItems 现在不再导致 500 错误。
block_import_tiger 现在可以安全地重新运行相同的文件,它不会再创建重复的块。
修复了抓取程序到控制台的双日志记录。
/streets/ 列表在您没有设置 DEFAULT_LOCTYPE_SLUG 时不会崩溃。
为获取 request.user 是 LazyUser 实例时的配置文件提供了一种解决方案。
进一步去除了更多的 URL。
当使用过时的Python版本时,我们的setup.py脚本现在会给出更详细的错误信息,而不是由于with语句导致的SyntaxError。
自定义登录视图现在在访问管理站点时可以正常工作,并且与django.contrib.auth兼容(使用相同的cookie)。工单编号#174
注销表单由于模板名称错误而损坏。已修复。
修复用户不存在时的500错误。
如果没有匹配的新闻条目,不要在构造richmaps URL时崩溃。
在“选择一个街区”页面上按街区分组,工单编号#263
在类似“Wilson Park”的街道上存储后缀;修复了一些地理编码失败。
修复newsitem.geojson上的500错误,工单编号#38
文档
太多无法一一列举,但这里有一些
所有(?) ebpub、ebdata、obadmin、obdemo软件包的Python API文档。工单编号#159。
关于如何通过scraper或管理界面导入电子表格的更好文档。
阐明电子邮件警报的行为。
关于“核心”新闻条目字段的更好文档。
记录ebpub.db.bin脚本。工单编号#96。
关于新闻条目评论和标记的文档。工单编号#252
关于模板覆盖的更好文档,请参阅custom-look-feel。
记录ebpub.streets.Places,请参阅places。工单编号#253
为ebpub.neighbornews提供基本文档,请参阅user_content。工单编号#211
记录如何获取2010年的人口普查文件而不是2009年的。
添加了settings_default.py中所有设置的文档。
关于模式、SchemaFields、属性以及它们之间关系的更好文档。
修复了示例crontab,感谢Tim Shedor
其他
将georss scraper的点解析代码从ebdata.retrieval.utils中的get_point()函数中提取出来。
通用的rss scraper现在是obdemo.scrapers.add_news的基础,它做了同样的事情。
通用的rss scraper现在是ListDetailScraper和RssListDetailScraper的子类。工单编号#242
升级到jquery-ui 1.8.17。
升级到jquery 1.7.1。
将一些NewsItemListDetailScraper的功能提升到BaseScraper中,使其更易于使用。
弃用log_exception(),日志模块实际上已经做了这件事
将full_geocode()移动到ebpub.geocoder.base;它在一个不明显的地方
默认情况下,每个用户一个API密钥。3个有点愚蠢。
项目详情
ebdata-1.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ea816385afa6de1a39c8439c8e8b2d8758383eec95fa5077e7340ebefdeea679 |
|
MD5 | b63e44221f004feb8f03babfb1b6d129 |
|
BLAKE2b-256 | b752679d44b2771f6a78c9fe1d3e61699ebc81694f5c812cd7137e4bd7eac3c1 |