2012-04-30 3 views
0

Boto를 사용하여 Amazon S3에 저장된 파일에서 mp3 태그를 가져 오려고합니다.Amazon S3의 파일에서 mp3 태그를 가져올 수 없습니다.

import boto 
from boto.s3.connection import S3Connection 
import eyeD3 

def main(): 
conn = S3Connection('______', '_________') 
myBucket = conn.get_bucket('bucketName') 

for key in skempi.list(): 
    if eyeD3.isMp3File(key.name): 
     audio = eyeD3.Mp3AudioFile(key.name) 

if __name__ == '__main__': 
    main() 

그러나, 나는 모든 파일 내 양동이 등을 나열 할 수 있습니다 : 여기 내 스크립트입니다. 내가 받고있는 오류는

IOError: [Errno 2] No such file or directory: u'ulver/01 Track 1.mp3' 

내 코드에 문제가 있습니까?

답변

1

내 로컬 드라이브에서 mp3 파일의 메타 데이터가있는 스크립트를 작성하고 Amazon S3 (Boto API 사용)에 노래를 업로드하고 "공개"권한을 설정하고 URL을 생성 한 다음 URL을 저장해야했습니다 및 금속 데이터를 MySQL 데이터베이스에 저장합니다. 그래서 어떤 사람들이 같은 문제에 부딪혔을 때, 이제는 노래를 업로드 한 다음 내 데이터베이스에 대한 업데이트를 실행할 필요가 없기 때문에이 문제가 해결되었습니다.

1

key.name을 eyeD3 함수에 전달하고 있지만 eyeD3.Mp3AudioFile을 호출 할 때 파일과 비슷한 객체를 원한다고 생각합니다. 나는 eyeD3를 사용하지 않은 그리고 내가 이것을 시도 할 수 있지만,이 같은 일을해야하므로 PIP를 통해 설치할 것 같지 않습니다

for key in skempi.list(): 
    if eyeD3.isMp3File(key.name): 
     audio = eyeD3.Mp3AudioFile(key) 
+1

아니요, 매개 변수에 String이 필요하므로 작동하지 않습니다. 내 문제는 내 양동이에있는 각 파일의 경로를 얻을 수 없다는 것입니다. –

+1

문자열이 필요한 경우 해당 문자열이 로컬 파일의 경로가되어야합니다. 이 경우 유일한 옵션은 S3에서 로컬 파일 시스템으로 key.get_contents_to_filename을 사용하여 파일을 복사 한 다음 로컬 파일의 경로를 Mp3AudioFile 클래스에 전달하는 것입니다. – garnaat

+1

음, 장고 앱의 MySQL 데이터베이스에 저장하기 위해이 파일의 경로 + mp3 메타 데이터를 가져와야하므로 나중에 내 웹 사이트에서 재생할 수 있습니다. 비 - 로컬 파일에서 태그를 읽을 수있는 다른 라이브러리 (eyeD3 제외)가 있습니까? –

1

이 파일의 태그를 볼 수있는 방법이 없습니다 없이 S3에서 다운로드합니다.

EC2를 사용하여 파일을 처리하거나 Amazons Elastic MapReduce을 고려해 볼 수 있지만 여전히 파일을 다운로드하여 태그를 읽으려고합니다.

+0

Django 관리자 패널에서 업데이트 (AS3의 mp3 파일에서 메타 데이터 추출 및 MySQL 데이터베이스로 데이터 업로드)를 실행하게됩니다. 그래서 나는 임시로 내 서버에 파일을 다운로드 한 다음 메타 데이터를 가져와야합니까? –

+0

@MohamedTurki - 일회성 작업입니까? 그렇다면 인덱싱을 선호하는 언어로 완전히 별도의 스크립트를 작성합니다. 나는 일시적으로 웹 서버에 파일을 다운로드하고 싶지 않습니다. –

+0

emm, 나는 아마도이 일을 얼마나 자주, 아마도 3 개월에 한 번 할 지 확신하지 못합니다.문제는 각기 다른 소스에서 데이터베이스를 채우고 각 mp3 파일의 URL을 얻으려면 AS3, 그리고 동일한 mp3 파일의 메타 태그를 가져 오려면 로컬 드라이브에서 채워야합니다. 어쩌면 필자는이 작업이 가치있는 것만 큼주의를 기울이지 않을 것입니다. 아마도 이렇게 복잡하지 않을 것이라고 생각했기 때문에 파일을 업로드하고 동시에 금속 데이터를 추출하는 스크립트를 작성해야할까요? 그것은 가능한가? –