2017-09-01 89 views
0

我正在使用一個API,它沒有在單次調用中需要的所有信息,而且我需要將它來自的項目代碼添加到我正在創建的調用中。現在它將項目數據追加到列表中,但我真的需要它成爲原始調用的一部分。這是我現在輸出:將條目添加到JSON中

[{"committer_email": "[email protected]", "short_id": "981147b9", "title": "Added .gitignore", "author_email": "[email protected]", "authored_date": "2017-08-29T08:31:11.000-07:00", "created_at": "2017-08-29T08:31:11.000-07:00", "author_name": "Justin Boucher", "parent_ids": [], "committed_date": "2017-08-29T08:31:11.000-07:00", "message": "Added .gitignore\n", "committer_name": "Justin Boucher", "id": "981147b905913a60796283ce10f915c53679df49"}, {"project_id": "2"}] 

這裏是我想達到的輸出:

[{"project_id": "2", "committer_email": "[email protected]", "short_id": "981147b9", "title": "Added .gitignore", "author_email": "[email protected]", "authored_date": "2017-08-29T08:31:11.000-07:00", "created_at": "2017-08-29T08:31:11.000-07:00", "author_name": "Justin Boucher", "parent_ids": [], "committed_date": "2017-08-29T08:31:11.000-07:00", "message": "Added .gitignore\n", "committer_name": "Justin Boucher", "id": "981147b905913a60796283ce10f915c53679df49"}] 

這是到目前爲止我的代碼:

get_commits.py:

import gitlab 
import json 

gitlab = gitlab.Gitlab() 

projects = gitlab.getProjectID() 

for i in projects: 
    api_str = '/projects/' + str(i) + '/repository/commits' 
    connect = gitlab.connectAPI(apiCall=api_str) 

    data = json.dumps(connect) 

    # Append project id to json, since it isn't created 
    # in the commits from Gitlab 
    commit = json.loads(data) 
    commit.append({'project_id': str(i)}) 

    # make it pretty again for Splunk to read 
    commit = json.dumps(commit) 

    print commit 

gitlab.py

import os 
import ConfigParser 
import requests 
import json 

# Setup Splunk Environment 
APPNAME = 'splunk_gitlab' 
CONFIG = 'appconfig.conf' 
SPLUNK_HOME = os.environ['SPLUNK_HOME'] 

parser = ConfigParser.SafeConfigParser() 


class Gitlab(): 
    # # Load Settings 
    # parser.read(SPLUNK_HOME + '/etc/apps/' + APPNAME + '/local/' + CONFIG) 
    # if parser.has_section('Authentication'): 
    #  pass 
    # else: 
    #  parser.read(SPLUNK_HOME + '/etc/apps/' + APPNAME + '/default/' + CONFIG) 
    # 
    # GITLAB_URL = parser.get('Authentication', 'GITLAB_URL') 
    # API_KEY = parser.get('Authentication', 'API_KEY') 

    # Used for testing only 
    GITLAB_URL = 'http://<my_address>' 
    API_KEY = '<my_key>' 
    API_SERVER = GITLAB_URL + '/api/v4' 



    # Place api call to retrieve data 
    def connectAPI(self, apiCall='/projects'): 

     headers = { 
      'PRIVATE-TOKEN': self.API_KEY 
     } 

     final_url = self.API_SERVER + apiCall 

     resp = requests.get(final_url, headers=headers) 

     status_code = resp.status_code 

     resp = resp.json() 

     if status_code == 200: 
      return resp 
     else: 
      raise Exception("Something went wrong requesting (%s): %s" % (
      resp['errors'][0]['errorType'], resp['errors'][0]['message'])) 

    def getProjectID(self): 
     connect = self.connectAPI(apiCall='/projects') 

     data = json.dumps(connect) 
     projects = json.loads(data) 
     project_list = [] 
     for i in projects: 
      project_list.append(i['id']) 

     return project_list 

回答

0

如果你想一個新的元素列表,而不是追加一個新的詞典添加到列表中的第一個字典,嘗試使用分配,而不是append

commit[0]['project_id'] = str(i) 
+0

太棒了。謝謝。我沒有意識到可以這樣做。 –