2017-07-31 94 views
-1

原始代碼摘自此主旨:rivaldi8/ImpactServlet.py,但因爲我使用的api密鑰不適用於QUERY_URL,所以我修改瞭如下代碼:TypeError:列表索引必須是整數(json,python)

class Scopus(ImpactService): 
    QUERY_URL = "https://api.elsevier.com/content/search/scopus?query=doi({1})&apiKey={0}&httpAccept=application/json" 
    API_KEY = "7f59af901d2d86f78a1fd60c1bf9426a" 

    def __init__(self, request): 
     self.doi = request.getParameter("doi") 

    def _getServiceResponse(self): 
     return requests.get(self.QUERY_URL.format(self.API_KEY, self.doi)) 

    def _buildResponseToClient(self, serviceResponse): 
     serviceResponseObject = json.loads(serviceResponse.text) 
     citationCount = serviceResponseObject["search-results"]["entry"]["0"]["citedby-count"] 
     linkBack = self._getLinkBack(serviceResponseObject) 
     return self._getJsonDocument(citationCount, linkBack) 

    def _getLinkBack(self, scopusData): 
     linkList = scopusData["search-results"]["entry"]["0"]["link"] 
     linkBackObject = next(link for link in linkList if link["@ref"] == "scopus-citedby") 
     return linkBackObject["@href"] 

低於該樣品JSON數據可以從該URL檢索:

{ 
    "search-results": { 
    "opensearch:totalResults": "1", 
    "opensearch:startIndex": "0", 
    "opensearch:itemsPerPage": "1", 
    "opensearch:Query": { 
     "@role": "request", 
     "@searchTerms": "doi(10.1038/35016500)", 
     "@startPage": "0" 
    }, 
    "link": [ 
     { 
     "@_fa": "true", 
     "@ref": "self", 
     "@href": "https://api.elsevier.com/content/search/scopus?start=0&count=25&query=doi%2810.1038%2F35016500%29&apiKey=7f59af901d2d86f78a1fd60c1bf9426a&httpAccept=application/json", 
     "@type": "application/json" 
     }, 
     { 
     "@_fa": "true", 
     "@ref": "first", 
     "@href": "https://api.elsevier.com/content/search/scopus?start=0&count=25&query=doi%2810.1038%2F35016500%29&apiKey=7f59af901d2d86f78a1fd60c1bf9426a&httpAccept=application/json", 
     "@type": "application/json" 
     } 
    ], 
    "entry": [ 
     { 
     "@_fa": "true", 
     "link": [ 
      { 
      "@_fa": "true", 
      "@ref": "self", 
      "@href": "https://api.elsevier.com/content/abstract/scopus_id/0034729765" 
      }, 
      { 
      "@_fa": "true", 
      "@ref": "author-affiliation", 
      "@href": "https://api.elsevier.com/content/abstract/scopus_id/0034729765?field=author,affiliation" 
      }, 
      { 
      "@_fa": "true", 
      "@ref": "scopus", 
      "@href": "https://www.scopus.com/inward/record.uri?partnerID=HzOxMe3b&scp=0034729765&origin=inward" 
      }, 
      { 
      "@_fa": "true", 
      "@ref": "scopus-citedby", 
      "@href": "https://www.scopus.com/inward/citedby.uri?partnerID=HzOxMe3b&scp=0034729765&origin=inward" 
      } 
     ], 
     "prism:url": "https://api.elsevier.com/content/abstract/scopus_id/0034729765", 
     "dc:identifier": "SCOPUS_ID:0034729765", 
     "eid": "2-s2.0-0034729765", 
     "dc:title": "Effect of aquaculture on world fish supplies", 
     "dc:creator": "Naylor R.", 
     "prism:publicationName": "Nature", 
     "prism:issn": "00280836", 
     "prism:volume": "405", 
     "prism:issueIdentifier": "6790", 
     "prism:pageRange": "1017-1024", 
     "prism:coverDate": "2000-06-29", 
     "prism:coverDisplayDate": "29 June 2000", 
     "prism:doi": "10.1038/35016500", 
     "citedby-count": "1386", 
     "affiliation": [ 
      { 
      "@_fa": "true", 
      "affilname": "Stanford University", 
      "affiliation-city": "Palo Alto", 
      "affiliation-country": "United States" 
      } 
     ], 
     "pubmed-id": "10890435", 
     "prism:aggregationType": "Journal", 
     "subtype": "re", 
     "subtypeDescription": "Review", 
     "source-id": "21206" 
     } 
    ] 
    } 
} 

基本上,我要檢索的"citedby-count"值是1386和在鏈路其中網址即"https://www.scopus.com/inward/citedby.uri?partnerID=HzOxMe3b&scp=0034729765&origin=inward"。因此,預期輸出應該返回這樣的:

{ 
    "citationCount": 1386, 
    "linkBack": "https://www.scopus.com/inward/citedby.uri?partnerID=HzOxMe3b&scp=0034729765&origin=inward" 
} 

我與上面的代碼是錯誤:

citationCount = serviceResponseObject["search-results"]["entry"]["0"]["citedby-count"] 
    TypeError: list indices must be integers 

如何解決TypeError: list indices must be integers問題?

在此先感謝。

+1

是的,你有名單裏面的字典。你有沒有嘗試過使用整數來索引這些?您當前正在使用「0」字符串。 –

回答

1

您已經使用字符串索引,而不是整數索引 變化

citationCount = serviceResponseObject["search-results"]["entry"]["0"]["citedby-count"] 

citationCount = serviceResponseObject["search-results"]["entry"][0]["citedby-count"] 
1

serviceResponseObject [ 「搜索結果」] [ 「進入」]是一個列表,該索引list must be a integer

change serviceResponseObject["search-results"]["entry"]["0"] to

serviceResponseObject["search-results"]["entry"][0] 
相關問題