0

我正在研究 Automator 工作流程,我将 URL 列表传递给“运行 Applescript”,我需要获取每个页面上的内容,连接并将其传递给 BBedit(或任何其他文本编辑器)。

on run {input, parameters}

    tell application "BBEdit"
        activate

        set astid to AppleScript's text item delimiters

        set startHere to "<tbody>"
        set stopHere to "</tbody>"

        repeat with anItem in input

            set blurb0 to (do shell script "curl " & anItem)
            set AppleScript's text item delimiters to startHere
            set blurb1 to text item 2 of blurb0
            set AppleScript's text item delimiters to stopHere
            set blurb2 to text item 1 of blurb1

            set AppleScript's text item delimiters to astid

            return blurb2
            beep

        end repeat      

    end tell

end run

当前代码仅正确地仅从第一个 URL 获取内容。任何人都可以解决这个问题吗?

4

2 回答 2

0

这个子程序可能是您需要的(如果您使用的是 Safari)...

on getSource(this_URL)
    tell application "Safari"
        activate
        set the URL of the current tab of document 1 to this_URL
        set the |source| to the source of the front document
    end tell
    tell application "TextEdit"
        activate
        set the text of the front document to the source
    end tell
    quit application "Safari"
end getSource

调用它使用:

repeat with anItem in input
    getSource(input)
end repeat

我希望这有帮助!

于 2011-09-25T16:54:03.333 回答
0

因为您在repeat with anItem in input循环中,所以它会为第一项完成所有工作,并return退出循环,实际上是整个 Automator 操作。我想你从来没有beep从你的剧本中听到过;-)

另一方面,我想知道为什么您希望 BBEdit 为您完成 cUrl 和排序工作。所有被调用的处理程序都不属于 BBEdit ...

我认为您的处理程序应如下所示:

on run {input, parameters}

    -- define a few parameters
    set astid to AppleScript's text item delimiters
    set startHere to "<tbody>"
    set stopHere to "</tbody>"

    -- define a list to store all found content
    set allFoundContent to {}

    repeat with anItem in input

        set blurb0 to (do shell script "curl " & anItem)
        set AppleScript's text item delimiters to startHere
        set blurb1 to text item 2 of blurb0
        set AppleScript's text item delimiters to stopHere

        -- put the found content at the end of the list
        set end of allFoundContent to text item 1 of blurb1

        set AppleScript's text item delimiters to astid

    end repeat

    -- from here you have three possibilities:
    -- 1. return the list to next Automator action (uncomment the next line):

    -- return allFoundContent


    -- 2. concatenate the list with a delimiter you like (here return & "------" & return)
    -- and give it to your preferred text editor from this point (uncomment the next lines):

    -- set AppleScript's text item delimiters to return & "------" & return
    -- tell application "TextEdit"
    --     make new document with properties {text: allFoundContent as text}
    -- end tell
    -- set AppleScript's text item delimiters to astid


    -- 3. concatenate the list with a delimiter you like (here return & "------" & return)
    -- and give it to the next workflow step, maybe a BBEdit action waiting for a string? (uncomment the next lines):

    -- set AppleScript's text item delimiters to return & "------" & return
    -- set returnString to allFoundContent as text
    -- set AppleScript's text item delimiters to astid
    -- return returnString


    -- Next decision (for choice 1 or 2):
    -- What do you want to give to next Automator action?

    -- you can pass your input (the given URLs) (uncomment next line):
    -- return input

    -- or your result list (uncomment next line):
    -- return allFoundContent
end run

问候,迈克尔/汉堡

于 2014-11-01T18:50:37.613 回答