2017-12-13 17 views
2

Im 새로운 취미없는 CMS 정신 (www.sanity.io)의 무료 버전을 탐구하는 취미 프로그래머.CSV를 sanity.io로 가져 오는 방법

내 프로젝트에 데이터를 업로드/가져 오기 할 때 문제가 발생합니다. CSV 파일에서 데이터를 가져 오는 방법이 있습니까? 문서의 예제는 json 파일에 대해서만 설명합니다. https://www.sanity.io/docs/content-studio/importing-data

내 프로젝트를 설명하는 대신 번들로 제공되는 영화 스튜디오를 예로 들어 보겠습니다. Film Studio에서 제작 한 정보의 레이어를 추가하고 싶다고 가정 해 보겠습니다. 이름, 국가, 웹 페이지, CEO, 영화 등의 열이있는 스튜디오 목록이있는 CSV 파일이 있습니다. 최종 버전은 해당 스튜디오의 영화 이름을 가진 배열입니다.이 CSV를 가져 와서 스튜디오 인 곳, 스튜디오 목록이 채워진 곳, 영화 배열이 텍스트가 아닌 참조 인 새 컨텐츠 유형을 만들고 싶습니다.

누구든지 내가 어떻게해야 성공할 수 있는지 이해할 수 있습니까?

답변

1

현재 데이터 의 CSV 파일에서 Sanity로 가져올 수있는 방법이 없습니다. 그래도 원하는 것을 성취하는 것은 꽤나 간단합니다.

  • 줄 바꿈으로 구분 된 JSON 파일
  • 가져 오기 파일에 새 문서를 작성

    1. 구문 분석 CSV는 스키마에 맞게
    2. 구조 들어오는 데이터를 파일 : 간단히 말해서, 이것은 당신이 원하는 것입니다하려는 것입니다

      ,321 : 정신에

    은 CSV 파일 studios.csv이 같이 보입니다라는 말 0

    아래 코드는 csv-parser을 사용하지만 CSV를 움켜 잡기 위해 다른 패키지를 사용하려는 경우에도 여전히 예로서 사용해야합니다.

    const csv = require('csv-parser') 
    const fs = require('fs') 
    const sanityClient = require('@sanity/client') 
    const client = sanityClient({ 
        projectId: 'my-project-id', 
        dataset: 'my-dataset', 
        useCdn: false 
    }) 
    
    function appendToFile(document) { 
        const docAsNewLineJson = `${JSON.stringify(document)}\n` 
        fs.appendFileSync('ready-for-import.ndjson', docAsNewLineJson, {flag: 'a+'}) 
    } 
    
    function moviesByTitles(titles) { 
        return client.fetch('*[_type == "movie" && title in $titles]', {titles: titles}) 
    } 
    
    fs.createReadStream('studios.csv') 
        .pipe(csv()) 
        .on('data', data => { 
        // Assuming movie titles are semi-colon separated 
        const titles = data.MOVIES.split(';') 
        // Fetch movies with these titles 
        moviesByTitles(titles).then(movies => { 
         // Build a Sanity document which matches your Studio type 
         const document = { 
         _type: 'studio', 
         name: data.NAME, 
         webPage: data.WEBPAGE, 
         movies: movies.map(movie => { 
          return { 
          _ref: movie._id, 
          _type: 'reference' 
          } 
         }) 
         } 
         // Append the document to a file for later import 
         appendToFile(document) 
        )} 
        }) 
    

    당신은 이제 당신이 간단하게 할 수있는 파일 ready-for-import.ndjson 수입에 대한 준비가 정신 문서를 포함하게 될 겁니다 :

    sanity dataset import ready-for-import.ndjson <my-dataset> 
    

    그것은 고유 비와 함께 _id 필드를 포함하는 유용 할 수 있습니다 각 스튜디오의 무작위 가치 studio_${data.NAME.toLowerCase().replace(' ', '-')}. 이렇게하면 중복되지 않고 문서를 여러 번 가져올 수 있습니다 (--replace 플래그 사용).