未知

Pycdm的Python项目详细描述


#PYCDM

pycdm是一个简单的库,用于将contentdm项和集合元数据用作python对象。仅使用集合别名和项目ID检索项目及其页面的所有元数据。

< Buff行情> cookbook=pycdm.item('cookbook','2775')

pycdm与contentdm 6 dmwebservices api接口以获取元数据。您还可以通过api类直接调用api:

< Buff行情> #返回dmgetiteminfo调用的解码json响应 调用=API-() iteminfo=call.dmgetiteminfo('Cookbooks','2775')

#安装

pycdm只与python 2.7x一起工作(仅用于使用collections.ordereddict子类,该子类保留字典中的节点和页面对象序列)。

使用pip安装:

< Buff行情> $pip安装pycdm

(或易于安装):

< Buff行情> $easy_安装pycdm

打开pycdm.py文件,用contentdm respository的基url和端口替换基和端口变量。

< Buff行情> base='http://yourbaseurl.edu' 端口=':81'

#示例

###使用项目和页面 α-ε项 contentdm项是三种类型之一:单页、复合对象-文档(一系列页面)或复合对象-专著(一系列按节点组织的页面,如按章节划分的书籍)。调用item()函数创建一个item对象,该对象具有与其描述性元数据和结构元数据相关的属性。这包括:

  • 描述性元数据记录(item.info,python dict where key=字段昵称)
  • 都柏林核心元数据记录(item.dcinfo,python dict where key=dc field昵称)
  • contentdm标识符(item.id)
  • 项目所属的集合对象(item.collection)
  • 项目的引用URL(item.refurl)
  • item对象的页面结构(item.structure)
  • 项目的组成页对象列表(item.page s)

对于单页项目,您还将获得:

  • 页面存储文件的url(item.fileurl)
  • 页面图像的默认缩放/剪切JPEG图像的URL。使用getimage()方法设置具有不同参数的url(item.imageurl)
  • 页面缩略图的URL(item.thumbURL)

要创建item对象,请对集合别名和contentdm item number使用item()调用:

< Buff行情> >>>gt;letter=pycdm.item('leighunt','1566')

这是文档类型复合对象:

< Buff行情> >>>>字母 <;pycdm.document实例,位于0x01972710>;

显示项目标题:

< Buff行情> >>>>字母信息["标题"] U'Colburn Mayne写给Leigh Hunt的信,19世纪50年代9月30日。

显示项目的参考URL:

< Buff行情>
>>> letter.refurl
'http://digital.lib.uiowa.edu/cdm/ref/collection/leighhunt/id/1566'

α>页 在pycdm中创建一个item对象也会为该项的每个页面创建页面对象。这包括每个页面的一些基本元数据:

  • contentdm标识符(.id)
  • 页面标签(.label)
  • 页面的父(项)标识符(.parentid)
  • 页面父节点标题(.parent node title,如果没有父节点,则默认为父项标题)
  • 项目的引用URL(item.refurl)
  • 页面存储文件的url(item.fileurl)
  • 页面图像的默认缩放/剪切JPEG图像的URL。使用getimage()方法设置具有不同参数的url(item.imageurl)
  • 页面缩略图的URL(item.thumbURL)

在item()调用中包含"pageinfo="属性也将检索其所有页面的记录和都柏林核心元数据。(默认值为"pageinfo="off",以减少对api的不必要调用):

< Buff行情> >;gt;gt;letter=pycdm.item('leighunt','1566',pageinfo='on')

显示页面标签每一页的ls:

< Buff行情>
>>> for p in letter.pages:
        p.label
u'Page1'
u'Page2'
u'Page3'
u'Page4'

打印信件每页的抄本:

< Buff行情>
>>> for p in letter.pages:
    print p.label + ': ' + p.info['transc']

第1页:9月30日

尊敬的先生

你的好心信跟着我来到了韦克洛教堂,今天早上,我和我的姐夫一个英国国教的牧师经过了牧师住宅,在那里我经常去教堂,就好像我主持了所有的英国国教教义一样;因此,收到你的几句台词和你的几句话,我感到更加耳目一新他们说你对我的信不满意;在

第2页:陌生人使用我们熟悉的语言听起来是最甜美的,我认为正统的观点,无论多么温和,(就像这里一样)似乎束缚了我的感情;我渴望呼吸一种更自由的空气,或带着一本"书换角"走进一个角落,这本书可能会把我的思想传播到世界各地,同情人性的所有方面不同的阶段。得知你身体不舒服,我很难过,不过,只要你能保持清醒的头脑。]我敢肯定,灵魂的清新和身体的虚弱是可以愉快地忍受的。我很高兴你能读到我的小说;你会发现它是多么粗心

第3页:通过出版社发来的消息,事实是出版商没有人来修改校样,这件事对我来说太新了,我的修改对校样没有什么改进。我相信你信中的这一点和其他错误不会受到谴责,而不是因为他们的缘故而受到谴责,而是只看我认为有什么东西可以取悦你的精神。你也会注意到,促使我在哈默史密斯公司寻求与你面谈的那种感觉,不是最近才有的,也不是仓促成长的,我相信,最后一章不会让你因为我的主人公对文学的品味而讨厌她。

我不能再侵入 你的时间和停留 先生 你的非常忠实 科尔伯恩梅恩

###使用集合和元数据字段 ####收藏 创建项实例还会创建相应的集合对象。集合对象的属性包括:

  • 集合别名(.alias)
  • 集合名称(.name)
  • 数字集合的URL(.url)
  • 集合的元数据字段(.field s,字段对象的python指令,其中key=字段昵称)
  • 集合字段映射到dublin core(.dcmap,一个python dict,其中key=字段昵称)

显示项目的完整收藏名称:

< Buff行情>

>>>gt;leighunt=letter.collection首先将项目的collection属性放入变量中 >>>>leighHunt.name然后调用集合对象的name属性 u'leigh hunt letters'

>;gt;gt;letter.collection.name这也适用 u'leigh hunt letters'

也可以直接创建集合对象:

< Buff行情> >>>gt;leighHunt=pycdm.collection('leighHunt')

对集合调用getitems()方法将检索集合中所有项目标识符的列表,并将其放入.item属性中:

< Buff行情> >>>gt;leighhunt.getitems() >>>gt;LeighHunt.项目 ['51'、'58'、'63'、'71'、'76'、'84'、'89'、'94'、'99'、'105'、'110'、'115'、'125'、'128'、'141'、'152'、'156'、'161'、'166'、'169'、'173'、'177'、'183'、'185'、'194'、'196'、'199'、'203'、'206'、'211'"23"、"228"、"262"、"267"、"272"、"274"、"277"、"279"、"283"、"288"、"294"、"298"、"303"、"308"、"311"、"316"、"321"、"325"、"330"、"335"、"339"、"340"、"344"、"350"、"355"、"359"、"362"、"367"、"370"、"374"、"379"、"383","388"、"394"、"399"、"404"、"409"、"413"…]

现在您可以遍历集合中的每个项(注意,这是许多api调用):

< Buff行情>< DL>
>>>>对于LeighHunt中的I。项目:
item=pycdm.item('leighhunt',i)

但也许您只是想生成集合中所有引用URL的列表:

< Buff行情>< DL>
>>>>对于LeighHunt中的I。项目:
打印"http://digital.lib.uiowa.edu/cdm/ref/collection/leighunt/id/"+i

####字段 创建集合对象时,将为其每个元数据字段创建字段对象。字段有全名和昵称。在使用api时,请求调用中的字段信息时需要昵称,但是在管理界面中很难找到这些昵称。您可以使用collection.field s列出集合中字段对象的所有昵称,但这不是很可读:

< Buff行情>
>>> leighhunt.fields
{u'fullrs': <pycdm.Field instance at 0x020BD3F0>, u'relati': <pycdm.Field instance at 0x020BD3C8>, u'contac': <pycdm.Field instance at 0x020C31E8>, u'cited': <pycdm.Field instance at 0x020BDA30>, u'number': <pycdm.Field instance at 0x020C33C8>, u'dmrecord': <pycdm.Field instance at 0x020B34E0>, u'transd': <pycdm.Field instance at 0x020BDB98>, u'archiv': <pycdm.Field instance at 0x020BDAF8>, u'oclc': <pycdm.Field instance at 0x020BD378>, u'file': <pycdm.Field instance at 0x020C3468>, u'topica': <pycdm.Field instance at 0x02090A30>, u'topicb': <pycdm.Field instance at 0x02090C60>, u'transa': <pycdm.Field instance at 0x020BD300>, u'numbea': <pycdm.Field instance at 0x020C33F0>, u'transc': <pycdm.Field instance at 0x020BD828>, u'creato': <pycdm.Field instance at 0x02090508>, u'subjec': <pycdm.Field instance at 0x02090E40>, u'rights': <pycdm.Field instance at 0x020BD210>, u'dmoclcno': <pycdm.Field instance at 0x020BD3A0>, u'title': <pycdm.Field instance at 0x02081AF8>, u'publis': <pycdm.Field instance at 0x02090530>, u'find': <pycdm.Field instance at 0x020B3C60>, u'note': <pycdm.Field instance at 0x02090DF0>, u'source': <pycdm.Field instance at 0x02090A80>, u'transb': <pycdm.Field instance at 0x020BDE18>, u'typa': <pycdm.Field instance at 0x020BD2B0>, u'contri': <pycdm.Field instance at 0x020BD8F0>, u'typb': <pycdm.Field instance at 0x020BD4B8>, u'type': <pycdm.Field instance at 0x020B3C10>, u'descri': <pycdm.Field instance at 0x02090AD0>, u'promo': <pycdm.Field instance at 0x020BDDF0>, u'object': <pycdm.Field instance at 0x020C3378>, u'locati': <pycdm.Field instance at 0x020BDF08>, u'colleb': <pycdm.Field instance at 0x020BDD28>, u'collea': <pycdm.Field instance at 0x020BDF80>, u'date': <pycdm.Field instance at 0x020905F8>, u'data': <pycdm.Field instance at 0x020C3440>, u'dmmodified': <pycdm.Field instance at 0x020B3CB0>, u'dmcreated': <pycdm.Field instance at 0x020B3C88>, u'catalo': <pycdm.Field instance at 0x020BDD50>, u'chrono': <pycdm.Field instance at 0x020B3530>, u'corpor': <pycdm.Field instance at 0x02090EE0>, u'digitx': <pycdm.Field instance at 0x020BD878>, u'upload': <pycdm.Field instance at 0x020C3490>, u'place': <pycdm.Field instance at 0x02090E90>, u'digiti': <pycdm.Field instance at 0x020C3418>, u'width': <pycdm.Field instance at 0x020C3148>}

使用.keys()只列出昵称会使其更具可读性:

< Buff行情> >>>gt;leighhunt.fields.keys() [u'fullrs',u'relati',u'contac',u'quired',u'number',u'dmrecord',u'transd',u'archiv',u'oclc',u'file',u'topica',u'topicb',u'transa',u'numbera',u'transc',u'creator u'subsec',u'rights',u'dmoclcno',u'title',u'u'publis',u'find',u'note',u'source',u'transb',u'typa',u'contri',u'typb',u'type',u'desci',u'promo',u'object',u'locati',u'collab',u'colla',u'date',u'data',u'dmmodified',u'dmcreated',u'catalo u'chr小野,u'corpor',u'digitx',u'upload',u'place',u'digiti',u'width']

但这仍然没有显示每个字段对应的全名。

通过查看字段对象,我们可以了解有关集合字段的更多信息。字段属性包括:

  • 集合的别名(.alias)
  • 字段的cdm昵称(.nick)
  • 域的都柏林核心映射(.dc)
  • 字段的义务,如果需要=1(.req)
  • 如果字段是隐藏的,则hidden=1(.hide)
  • 如果字段已编入索引,则search=1(.search)
  • 如果字段已控制词汇,则vocab=1(.vocab)
  • 字段的受控词汇术语列表(.vocabterms)

显示每个字段的昵称和全名(我们也会对它们进行排序),以便:

< Buff行情>
>>> for k, v in sorted(leighhunt.fields.items()):
    print k + ": " + v.name

档案收藏 加泰罗尼亚:编目人 时间:时间主题 引用:发表于 Collea:收藏指南 colleb:集合标识符 contac:联系方式 出资机构 公司名称主题 创建者:创建者 数据:数字日期 日期:原始日期 说明:说明 Digiti:数字化规范 数字收藏 dmcreated:创建日期 dmmodified:修改日期 dmoclcno:oclc编号 dmrecord:contentdm编号 …

我们还可以从collection对象中找到字段的全名。列出"日期"字段的全名:

< Buff行情>
>>> leighhunt.fields['date'].name
u'Date Original'

或者dc映射。获取"主题主题(lcsh)"("topica")字段的都柏林核心映射:

< Buff行情>
>>> leighhunt.dcmap['topica']
u'subjec'

γ-CSV 在python中使用unicode是一种痛苦,不是吗?使用这个库所做的大部分工作可能涉及将元数据以完美的utf-8格式转储到csv文件中。csv对象通过将创建unicode csv写入程序的工作放在库中,使这一点更容易,因此您不必这样做。

创建要写入的新csv文件。包括文件名和标题行(可选):

< Buff行情> >;gt;gt;f=pycdm.csv('myfile.csv',header=['foo','bar','one','two'])

那就做你的事。将一行数据写入csv文件(其中row=[your,list,of,values]:

< Buff行情> >>>gt;F.WriteRow(世界其他地区)

完成后不要忘记关闭文件:

< Buff行情> >>>gt;f.关闭()

###一句警告! 如果您从未使用过api,或者您没有管理过contentdm服务器,请与您的在你开始之前。一旦您开始同时处理许多项或集合,就很容易生成许多api调用,这可能足以帮助您的服务器崩溃。您的系统管理员可以帮助您负责任地进行黑客攻击,或者为您提供测试实例的密钥。

#许可证

版权所有©2012 shawn averkamp<;shawnaverkamp@gmailcom>;

此程序是免费软件:您可以重新分发和/或修改 根据由 自由软件基金会,或者许可证的第3版,或者 (由您选择)任何更高版本。

这个程序的发布是希望它能有用, 但没有任何保证;甚至没有 适销性为特定目的的适销性或适合性见 GNU通用公共许可证了解更多详细信息。

你应该收到GNU通用公共许可证的副本 还有这个节目。如果没有,请参见http://www.gnu.org/licenses/" rel="nofollow">http://www.gnu.org/licenses/>;

#贡献者

感谢Chad Nelson(Bibliotechy)对dmgetCollections()和dmquery()的帮助。

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

推荐PyPI第三方库


热门话题
显示图像的RGB编号的java   java JavaFX画布2D游戏:背景变换vs.绘画   在到达maxElementsInMemory之前创建的java DiskMarker   a4j:ajax可用事件的java详尽列表?   java从批处理文件运行jar文件,如果出现错误,则显示meessage   音频Java在背景音乐之上播放声音   用于在FTP中上载文件的java更改目录   尽管设置了必要的属性,java列表项仍不会保持选中状态   java Stanford Core NLP解析与CSV   java使用缓冲区合并热态和冷态   java无法初始化类javax。加密。JCE安全   对这个Java循环如此困惑的输入   java Spring RabbitMQ SimpleRabbitListenerContainerFactory用法   java如何使用jGrowl创建JSF消息   安装jRebel插件后,Netbeans项目中的java源文件夹不可见?   如何在Java中解析复杂的json字符串   java Spark KafkaUtils CreateRDD在键上应用过滤器   try块中的java代码被忽略,为什么?