AppleScript that scrapes a website for data with curl function not working after some time making it

86 views Asked by At

The code below used to work at scraping the trading value of a cryptocurrency website. Now it prints the name of the crypto and the time it was read but no value. Is it because the curl function isn't working anymore? Any help is appreciated.

The code uses a curl function to call the value of the crypto every 5 seconds. I got the code from a helpful stack overflow user and it worked well when I implemented it but it doesn't return the monetary value anymore. It creates a log file to the desktop and writes in the background as an application.

property eGrepBitcoinPrice : "priceValue\">\\$\\d{2},\\d{3}.\\d{2}"
property eGrepLitecoinPrice : "priceValue\">\\$\\d{2}.\\d{2}"
property eGrepDogecoinPrice : "priceValue\">\\$\\d{1}.\\d{5}"
property currentBitcoinPrice : missing value
property currentLitecoinPrice : missing value
property currentDogecoinPrice : missing value
property logToTextFile : missing value

on run --   Executed Only Once.. When This Script Applet Is Launched
    activate
    set logToTextFile to (display dialog ¬
        "Enable Quick Log Mode?" buttons {"No", "Yes"} ¬
        default button 2 with title "Log Mode")
    if button returned of logToTextFile = "Yes" then
        my logCommands's beginLog()
        getPrices()
    else
        getPrices()
        return {currentBitcoinPrice, currentDogecoinPrice, currentLitecoinPrice}
    end if
end run

on idle
    getPrices()
    try
        if button returned of logToTextFile = "Yes" then my logCommands's writeToLog()
    on error errMsg number errNum
        my logCommands's writeToLog()
    end try
    
    (* within this idle handler is where you will place
    The bulk of your additional code. All of your Excel
    Code Goes Here*)
    
    return 5 -- In Seconds, How Often To Run Code In This Idle Handler
end idle

---------- PLACE ALL ADDITIONAL HANDLERS BENEATH THIS LINE ----------

on getPrices()
    set currentBitcoinPrice to do shell script ¬
        "curl --no-keepalive 'https://coinmarketcap.com/currencies/bitcoin/markets/' " & ¬
        "| grep -Eo " & quoted form of eGrepBitcoinPrice & " | cut -c 14-"
    set currentLitecoinPrice to do shell script ¬
        "curl --no-keepalive 'https://coinmarketcap.com/currencies/litecoin/' " & ¬
        "| grep -Eo " & quoted form of eGrepLitecoinPrice & " | cut -c 14-"
    set currentDogecoinPrice to do shell script ¬
        "curl --no-keepalive 'https://coinmarketcap.com/currencies/dogecoin/' " & ¬
        "| grep -Eo " & quoted form of eGrepDogecoinPrice & " | cut -c 14-"
end getPrices

on quit --  Executed Only When The Script Quits
    if button returned of logToTextFile = "Yes" then my logCommands's endLog()
    continue quit -- Allows The Script To Quit
end quit

script logCommands
    property pathToPriceLog : POSIX path of (path to desktop as text) & "Price Log.txt"
    on beginLog()
        set startTime to ("Start Time... " & (current date) as text) & ¬
            " Price Scanning At 5 Minute Intervals"
        do shell script "echo " & startTime & " >> " & ¬
            quoted form of pathToPriceLog
    end beginLog
    on writeToLog()
        do shell script "echo " & "Bitcoin:" & quoted form of currentBitcoinPrice & ¬
            "   Dogecoin:" & quoted form of currentDogecoinPrice & ¬
            "  Litecoin:" & quoted form of currentLitecoinPrice & ¬
            "     " & quoted form of (time string of (current date)) & ¬
            " >> " & quoted form of pathToPriceLog
    end writeToLog
    on endLog()
        set endTime to quoted form of "End Time... " & (current date) as text
        do shell script "echo " & endTime & " >> " & ¬
            quoted form of pathToPriceLog
        do shell script "echo " & " " & " >> " & ¬
            quoted form of pathToPriceLog
    end endLog
end script
0

There are 0 answers