Yaklaşık 6 alan almak için Google XML'den geçmeye çalışıyorum. Google Apps Alanındaki kullanıcı profilleri için XML feed'ini çekmek için Google tarafından sağlanan gdata'yı kullanıyorum. Bu sonuç ise:XML python'dan veri al
import atom
import gdata.auth
import gdata.contacts
import gdata.contacts.client
from lxml import etree
from lxml import objectify
email = '[email protected]'
password = 'password'
domain = 'domain.com'
gd_client = gdata.contacts.client.ContactsClient(domain=domain)
gd_client.ClientLogin(email, password, 'profileFeedAPI')
profiles_feed = gd_client.GetProfilesFeed('https://www.google.com/m8/feeds/profiles/domain/domain.com/full?max-results=300')
def PrintFeed(feed):
for i, entry in enumerate(feed.entry):
print '\n%s %s' % (i+1, entry.title.text)
print(profiles_feed)
PrintFeed(profiles_feed)
profiles_feed2=(str(profiles_feed))
root = objectify.fromstring(profiles_feed2)
print root
print root.tag
print root.text
for e in root.entry():
print e.tag
print e.text
Bunu iade etmek alabilirsiniz:
<?xml version="1.0"?>
-<ns0:feed ns1:etag="W/"LIESANDCRAPfyt7I2A9WhHERE."" xmlns:ns4="http://www.w3.org/2007/app" xmlns:ns3="http://schemas.google.com/contact/2008" xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:ns1="http://schemas.google.com/g/2005" xmlns:ns0="http://www.w3.org/2005/Atom">
<ns0:updated>2012-01-25T14:52:12.867Z</ns0:updated>
<ns0:category term="http://schemas.google.com/contact/2008#profile" scheme="http://schemas.google.com/g/2005#kind"/>
<ns0:id>domain.com</ns0:id>
<ns0:generator version="1.0" uri="http://www.google.com/m8/feeds">Contacts</ns0:generator>
<ns0:author>
<ns0:name>domain.com</ns0:name>
</ns0:author>
<ns0:link type="text/html" rel="alternate" href="http://www.google.com/"/>
<ns0:link type="application/atom+xml" rel="http://schemas.google.com/g/2005#feed" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full"/>
<ns0:link type="application/atom+xml" rel="http://schemas.google.com/g/2005#batch" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/batch"/>
<ns0:link type="application/atom+xml" rel="self" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full?max-results=300"/>
<ns2:startIndex>1</ns2:startIndex>
<ns2:itemsPerPage>300</ns2:itemsPerPage>
<ns0:entry ns1:etag=""CRAPQR4KTit7I2A4"">
<ns0:category term="http://schemas.google.com/contact/2008#profile" scheme="http://schemas.google.com/g/2005#kind"/>
<ns0:id>http://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson</ns0:id>
<ns1:name>
<ns1:familyName>Person</ns1:familyName>
<ns1:fullName>Name Person</ns1:fullName>
<ns1:givenName>Name</ns1:givenName>
</ns1:name>
<ns0:updated>2012-01-25T14:52:13.081Z</ns0:updated>
<ns1:organization rel="http://schemas.google.com/g/2005#work" primary="true">
<ns1:orgTitle>JobField</ns1:orgTitle>
<ns1:orgDepartment>DepartmentField</ns1:orgDepartment>
<ns1:orgName>CompanyField</ns1:orgName>
</ns1:organization>
<ns3:status indexed="true"/>
<ns0:title>Name Person</ns0:title>
<ns0:link type="image/*" rel="http://schemas.google.com/contacts/2008/rel#photo" href="https://www.google.com/m8/feeds/photos/profile/domain.com/nperson"/>
<ns0:link type="application/atom+xml" rel="self" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson"/>
<ns0:link type="application/atom+xml" rel="edit" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson"/>
<ns1:email rel="http://schemas.google.com/g/2005#other" address="[email protected]"/>
<ns1:email rel="http://schemas.google.com/g/2005#other" primary="true" address="[email protected]"/>
<ns4:edited>2012-01-25T14:52:13.081Z</ns4:edited>
</ns0:entry>
<ns0:title>domain.com's Profiles</ns0:title>
</ns0:feed>
Verileri ayrıştırmak için LXML kullanmaya çalışıyorum, ancak bu kadar iyi yürümüyor, bu benim kodudur besle ve sonra giriş, ama daha uzak keşfedemiyorum. İhtiyacım olan şey, ns1 adındaki ad alanlarını ve ns1 organizasyonundaki org alanını oluşturur. Biraz kayboldum, bu yüzden herhangi bir yardım büyük beğeni topluyor.
Ne/hata sorunu "biraz kayıp" olmanın ötesinde, karşı karşıya? Ayrıca, sadece birkaç alana ihtiyacınız varsa, bunun için SAX'in ayrışmasını düşünün. – Marcin
@marcin karşı karşıya olduğum problem, ihtiyacım olan alanları alamıyorum ve nasıl yapacağımı bilmiyorum. – Kevin
Bu soruyu yeniden açmak için oy verildi. Temel sorun, isim alanlarının farkında olmamanızdır. Bkz. [Lxml objectify ile ad alanlarını kullanma] (http://lxml.de/objectify.html#namespace-handling) veya aynısını [xpath kullanarak kullanma] (http://lxml.de/xpathxslt.html#xpath) –