문제

AppleScript 재생 목록 생성기를 작성하고 있습니다. 프로세스의 일부는 iTunes 라이브러리 XML 파일을 읽고 사용자 라이브러리에서 모든 장르 목록을 얻는 것입니다. 이것은 파이썬 구현입니다. 원하는대로 작동합니다.

    #!/usr/bin/env python

# script to get all of the genres from itunes

import re,sys,sets


## Boosted from the internet to handle HTML entities in Genre names
def unescape(text):
    def fixup(m):
        text = m.group(0)
        if text[:2] == "&#":
            # character reference
            try:
                if text[:3] == "&#x":
                    return unichr(int(text[3:-1], 16))
                else:
                    return unichr(int(text[2:-1]))
            except ValueError:
                pass
        else:
            # named entity
            try:
                text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
            except KeyError:
                pass
        return text # leave as is
    return re.sub("&#?\w+;", fixup, text)


# probably faster to use a regex than to try to walk
# the entire xml document and aggregate the genres
try:
    xml_path = "/Users/%s/Music/iTunes/iTunes Music Library.xml" % sys.argv[1]
except:
    print '\tUsage: python '+sys.argv[0]+' <your OSX username>'
    raise SystemExit

pattern = "<key>Genre</key><string>([^<]+)</string>" 

try:
    xml = file(xml_path,'r').read()
except:
    print '\tUnable to load your iTunes Library XML file'
    raise SystemExit

matches = re.findall(pattern,xml)
uniques = map(unescape,list(sets.Set(matches)))
## need to write these out somewhere so the applescript can read them
sys.stdout.write('|'.join(uniques))
raise SystemExit

문제는, 사과 스크립트가 자체 포함되기를 원 하며이 추가 파일이 참석할 필요가 없다는 것입니다 (나는 이것을 다른 사람들이 이용할 수 있도록 계획). 그리고 내가 알 수있는 한, AppleScript는 상자 밖에서 어떤 유형의 정규식 기능을 제공하지 않습니다. 라이브러리의 각 트랙을 고려하여 모든 장르를 얻을 수 있지만 재생 목록을 작성할 때 이미 한 번 수행하는 엄청나게 긴 프로세스입니다. 그래서 저는 대안을 찾고 있습니다.

AppleScript를 사용하면 쉘 스크립트를 실행하고 결과를 캡처 할 수 있으므로 일부 유형의 쉘 명령을 사용하여 동일한 동작을 달성 할 수 있다고 생각합니다. My *Nix Command Line 기술은 매우 녹슬고 약간의 지침을 찾고 있습니다.

요컨대, 위의 파이썬 코드를 쉘에서 직접 호출 할 수있는 것으로 변환하고 비슷한 결과를 얻을 수있는 방법을 찾고 싶습니다. 감사!

도움이 되었습니까?

해결책

XML을 구문 분석하기 위해 Regex를 사용하는 이유는 무엇입니까? 적절한 XML 라이브러리를 사용하지 않는 이유는 무엇입니까? Python은 ElementTree와 같은 훌륭한 유틸리티를 가지고있어 DOM을 훨씬 쉽게 걷는 것이며, 유형의 현이 대신 멋지고 친근한 물체를 산출합니다.

AppleScript를 사용하여 XML을 구문 분석하는 몇 가지 방법은 다음과 같습니다.

사과 스크립트 XML 파서 (호랑이 이후로 제공)

XML 도구 AppleScript와 함께 사용할 수 있습니다

사과 스크립트가 iTunes에 연결할 수있는 것처럼 이와 같은 다른 설치된 유틸리티에 연결될 수 있습니다.

마지막으로, 디버깅을위한 더 나은 개발 도구를 가지고 있고 훨씬 더 빨리 실행되기 때문에 Python에 모든 것을 쓰지 않겠습니까? 표범을 실행하는 경우 Python 2.5.1이 사전 설치되어 있습니다.

다른 팁

독립형 앱을 작성하는 것이 솔루션입니까?

py2app를보십시오 :

py2app은 py2exe와 같이 작동하지만 Mac OS를 대상으로합니다

보다

이미 Applescript에서 일하고 있다면 iTunes에게 직접 물어 보는 것이 어떻습니까?

tell application "iTunes" to get genre of every track of library playlist 1
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top