2017-08-03 84 views
0

我在本地系統中的文件,我想創建一個文件,其中包含的元數據:如何使用java在ckan中創建任何文件的元數據(JSON)?

{Filename, create date, update date, file format etc etc} 

爲一個JSON格式的鍵值對。接下來,我想在CKAN(CKAN API調用)中上傳它,以便我最終可以使用CKAN url來查看該文件。我已經有CKAN主機URL和CKAN密鑰。

請有人可以幫我寫這個Java腳本?我是CKAN新手,第一次嘗試這樣做,但我無法做到。如果有人可以分享示例代碼以供參考,那將會很有幫助。我認爲它應該只是一個API調用。

1.對於同樣的工作,下面是python腳本。但我想它在Java中完成,請幫助..

metadata ={} 
azure_urls=[] 
for blob in urls: 
    print(blob) 
    for url in urls[blob]: 
     print(url) 
     r = requests.get(url,stream=True) 
     file_name = url.split(「/」)[-1] 
     with open(file_name, ‘wb’) as data: 
      for chunk in r.iter_content(chunk_size = 1024*1024): 
       if chunk: 
        data.write(chunk) 
     block_blob_service.create_blob_from_path(path.join(container,blob), 
           data.name, 
           file_name , 
           content_settings=ContentSettings(content_type=mimetypes.guess_type(‘./%s’ %url.split(「/」)[-1])[0])) 
     print(‘uploading file to ‘+’‘+blob+' ‘+’in a ‘+ container) 
     os.remove(data.name) 
     download_url = block_blob_service.make_blob_url(path.join(container, blob),data.name) 
     azure_urls.append(download_url) 
    metadata[blob]= azure_urls 
    metadata[‘Title’] = ‘Dbpedia’+‘-’+blob 
    metadata[‘Publisher’] = ‘Name’ 
    metadata[‘Created’] = datetime.now().strftime(「%Y-%m-%d %H:%M:%S」) 
    metadata[‘version’] = 「2016-10" 
    metadata[ 「Container」] = container 
    metadata[‘SourceType’] = [url.split(「.」)[-1] for url in azure_urls] 
    print(metadata) 
  • 及以下ckanAPI調用語句:

    CKAN = ckanapi.RemoteCKAN(」 http://hostname 」, '密鑰')

  • 3.getting如以下URL輸出:

    {‘ontology’: [‘link1', ‘link2’], ‘Title’: ‘Dbpedia-ontology’, ‘Publisher’: ‘SiddarthaP’, ‘Created’: ‘2017-08-03 00:55:22’, ‘version’: ‘2016-10’, ‘Container’: ‘dbpedia’, ‘SourceType’: [‘owl’, ‘nt’]} 
    
    +0

    您應該添加您嘗試過的代碼,以便我們可以幫助您 –

    +0

    @CristiánRamón-Cortés添加了相同工作的Python腳本。無法編寫Java腳本..請檢查並幫助 – anshul

    +0

    我還有一些不清楚的地方:你需要Java還是JavaScript嗎? –

    回答

    0

    我假設你要做的是按給定格式處理一些信息並將其上傳到CKAN。我不確定您在Python中提供的代碼是否符合您的期望(即所有斑點共享這些網址,而不是每個網點都累積的網址),並且它也不會上傳任何內容。

    這就是說,使用亞幹API V0.4,你可以寫一個類似代碼:

    • 創建CKAN安全客戶端
    • 流程,您從您的其他服務接收到的信息
    • 創建元數據的JSON表示
    • 上傳它CKAN

    的代碼:

    private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    
    
    public static void processUrls(String[] blobs, Map<String, String[]> urls) { 
        CkanClient cc = new CheckedCkanClient("HOSTNAME", "key"); 
    
        // Process each blob 
        for (String dsName : blobs) { 
         System.out.println("DATASET: " + dsName); 
    
         // Process all the available URLS of the same blob 
         List<String> urls = new ArrayList<>(); 
         String publisherName; 
         String container; 
         for (String url : urls.get(blob)) { 
          System.out.println("URL: " + url); 
          String[] urlFields = url.split("/"); 
          String fileName = urlFields[urlFields.length - 1]; 
    
          System.out.println(" - Resource " + fileName + " with URL " + url); 
    
          urls.add(url); 
         } 
    
         // Construct the JSON metadata 
         JSONObject metaData = createMetaData(dsName, urls, publisherName, container); 
         System.out.println("METADATA: "); 
         System.out.println(metaData.toJSONString()); 
    
         // Upload to CKAN 
         ObjectMapper objectMapper = new ObjectMapper(); 
         CkanDataset cd = objectMapper.readValue(metaData, CkanDataset.class); 
         CkanDataset createdDataset = cc.createDataset(cd); 
        } 
    } 
    
    private JSONObject createMetaData(String dsName, List<String> urls, String publisherName, String container) { 
        JSONArray metaDataUrls = new JSONArray(); 
        JSONArray urlTypes = new JSONArray(); 
        for (String url : urls) { 
         metaDataUrls.put(url); 
         String[] urlFields = url.split("."); 
         urlTypes.put(urlFields[urlFields.length - 1]); 
        } 
    
        JSONObject metaData = new JSONObject(); 
        metaData.put(dsName, metaDataUrls); 
        metaData.put("Title", "Dbpedia-" + dsName); 
        metaData.put("Publisher", publisherName); 
        metaData.put("Created", FORMAT.format(new Date())); 
        metaData.put("version", "2016-10"); 
        metaData.put("Container", container); 
        metaData.put("SourceType", urlTypes); 
    
        return metaData; 
    } 
    
    +0

    有一個ckan的API ... Named - JACKAN – anshul

    +0

    CKAN有多個Java API ...使用JAKAN查看我更新的答案。但是,您應該更清楚地說明您的問題,因爲很難知道您嘗試上傳的信息的格式。 –

    +0

    Thanku Cristian,這個更新後的代碼對我來說似乎很有用...將使用它並繼續工作... – anshul

    相關問題