"X of every"를 사용하여 각 객체의 여러 속성을 사용하여 레코드를 만드는 AppleScript가 있습니까?


1

스크립트를 사용하여 다음을 수행 할 수 있습니다.

tell application "Safari"
    set urls to URL of every tab of every window
end tell

실행하면, 모든 윈도우의 모든 탭의 모든 URL을 가져옵니다 (2 차원 목록)

Result:
 {{"http://domain1", "http://domain2", ...}, {"http://domain3", "http://domain4", ...}, {...}}

그러나 가능합니다 :

tell application "Safari"
    set (urls & name) to URL of every tab of every window
end tell

목록 대신 레코드를 얻는 방법 :

Result:
 {{{url: "http://domain1", name: "domain1 - foo"}, {url: "http://domain2", name: "domain2 - bar2"}, {...}}, {{url: "http://domain3", name: "domain3 - foo3"}, {url: "http://domain4", name: "domain4 - bar4"}, {...}}}

가능합니까, 아니면 사용해야합니까? repeat?

답변:


2

단일 객체 지정자로 레코드를 가져올 수는 없지만 목록을 가져올 수 있습니다.

tell application "Safari"
    {URL, name} of tabs of windows
end tell
-- {{{"http://url1", "title 1"}, {"http://url2", "title 2"}}}

레코드의 경우 반복 루프를 사용할 수 있습니다.

set r to {}
tell application "Safari"
    repeat with t in tabs of windows
        set end of r to {|url|:URL of t, |name|:name of t}
    end repeat
end tell
r
-- {{|url|:"http://url1", |name|:"title 1"}, {|url|:"http://url2", |name|:"title 2"}}

큰! 이 모든 것을 얻을 수있는가요? {|safari|: {{|window_1|: {|url|: "http://url1", |name|: "title 1"}, {|url|:"http://url2", |name|:"title 2"}},{|window_2|: {|url|: "http://url3", |name|: "title 3"}, {|url|:"http://url4", |name|:"title 4"}}}} ? 그래서 레코드를 json으로 변환 할 수 있습니다 (예 : JSON Helper ) 아직도 사파리 창문 구조가 있습니까? 나는 모든 것을 문자열 기반 (레코드 /리스트 기반이 아닌, 내가 갖고 싶은 것)으로 만들기위한 스크립트를 작성했으며, 3 줄의 서브 루틴이있는 약 200 줄의 코드이며, 나 자신조차도보기 흉하게 보인다.
static

내가 이렇게 시험하면 : {|safari|: {|window1|: {{|url1|: "http1", |name1|: "title1"},{|url2|: "http2", |name2|: "title2"},{|url3|: "http3", |name3|: "title3"}}}} & {|safari|: {|window2|: {{|url1|: "http1", |name1|: "title1"},{|url2|: "http2", |name2|: "title2"},{|url3|: "http3", |name3|: "title3"}}}} 반환 값 : {safari:{window1:{{url1:"http1", name1:"title1"}, {url2:"http2", name2:"title2"}, {url3:"http3", name3:"title3"}}}} 병합 된 변형이 아니라 목록이있는 경우 windows
static

이중 중괄호 (예 : 목록) : {|safari|: -->{{<-- |window1|: ... 아무런 변화가 없다.
static

너무 많은 오프 - 토픽 코멘트에 대해 유감스럽게 생각합니다. 그러나 저는 이것을 거의 스스로 해결했습니다 : 런타임에서 레코드의 키를 설정하는 방법은 무엇입니까? 그래서 set end of w_l to {|window & "_" & window_i :t_l} ?
static
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.