首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AppleScript - Skype接口

AppleScript - Skype接口
EN

Stack Overflow用户
提问于 2011-04-14 23:12:43
回答 1查看 1.6K关注 0票数 0

我对AppleScript非常陌生。我发现这个脚本与GeekTool Geeklet一起使用来显示在线Skype用户。当我运行AppleScript时,会得到一个"skype_id“未定义的错误。我找不到它在哪里/为什么没有定义。很明显,同样的剧本在过去起了作用。

这里是错误:错误“变量skype_id未定义”。号码-2753从"skype_id“

这里是脚本:

代码语言:javascript
复制
on remvix(ix, ls)
if ls is {} then
    return {}
else if ix is 1 then
    return rest of ls
else
    return {item 1 of ls} & remvix(ix - 1, rest of ls)
end if
end remvix

on tail(astring, k)
return do shell script "echo '" & astring & "' | awk '{{i = " & k & "; while ( i <= NF-1 ) {printf $i \" \"; i++}; printf $i}}'"
end tail

property onlinegroup : 0

on getgroup()
tell application "Skype"
    if my checkgroup(onlinegroup) is true then
        return onlinegroup
    else
        set hardwired to send command "search groups hardwired" script name "online users"
        set hardwired to my tail(hardwired, 2)
        set hardwired to text items of hardwired
        repeat with i in hardwired
            if my checkgroup(i) is true then
                return i
            end if
        end repeat
    end if
end tell
end getgroup

on checkgroup(group_id)
tell application "Skype"
    set grouptype to send command "get group " & group_id & " type" script name "online users"
    set grouptype to my tail(grouptype, 4)
    if grouptype is "ONLINE_FRIENDS" then
        return true
    else
        return false
    end if
end tell
end checkgroup

property dropped : 0
set text item delimiters to ", "
set onlineusers to {}
tell application "System Events"
set powerCheck to ((application processes whose (name is equal to "Skype")) count)

if powerCheck = 0 then
    set end of onlineusers to " Skype not running"
else
    tell application "Skype"
        set onlinegroup to my getgroup()
        set skype_id to send command "get group " & onlinegroup & " users"    script name "online users"
        set skype_id to my tail(skype_id, 4)
        set skype_id to text items of skype_id
        repeat with j from 1 to count skype_id
            if item j of skype_id is "echo123" then
                set skype_id_new to my remvix(j, skype_id)
                set dropped to 1
            end if
        end repeat
        if dropped is 1 then
            set skype_id to skype_id_new
        end if
        repeat with i in skype_id
            set aUser to send command "get user " & i & " fullname" script name "online users"
            set aUser to my tail(aUser, 4)
            if aUser is "" then set aUser to i
            set amoodtext to send command "get user " & i & " mood_text" script name "online users"
            set amoodtext to my tail(amoodtext, 4)
            if amoodtext is "" then
                set end of onlineusers to aUser
            else
                set end of onlineusers to aUser & " (" & amoodtext & ")"
            end if
        end repeat

        if (count skype_id) > 0 then
            set item 1 of onlineusers to " " & item 1 of onlineusers
        else
            set beginning of onlineusers to " No Contacts Online"
        end if
        return onlineusers
    end tell
end if
end tell

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2011-05-25 19:25:13

“我的尾巴”是脚本自己的函数/处理程序,它只是一个awk (shell)脚本的包装器。由于某些原因,该函数没有返回任何内容,而且我注意到它没有包含错误检查。开始调试“on”块将是有用的。例如,参数astring和k是否有意义?此错误处理代码可以插入尾处理程序的开头:

代码语言:javascript
复制
if ((class of astring) is not string) or ((class of k) is not integer) then
display dialog "Screwy parameter sent to tail" buttons {"Rats"} default button 1
error number -128 -- abort script entirely 
end if

如果这没有找到错误,那么也许awk是错误的行为,这似乎不太可能,但仍然有可能,我想。

只是一般性的观察。我知道appleScript应该是一种友好、容易使用的语言(尽管它不是),而且您可能是从其他人那里获得这个脚本的,但是为了调试目的,您需要通过多次重新定义skype_id变量来自找麻烦。(这就是查克做出回应的原因)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5670760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档