#COMPILE EXE "AliExpress Orders.exe"
#DIM ALL
#RESOURCE "res\aliexpress.pbr"
#INCLUDE ONCE "..\..\WinApi\Win32Api.inc"
#INCLUDE ONCE ".\SendInput.inc"
'---------------------------------------------------------------------------------------
GLOBAL nitem, UPD AS LONG
'---------------------------------------------------------------------------------------
MACRO TMPFILE(i) = "tmp\AE_orders_" + FORMAT$(i, "00") + ".html"
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION PBMAIN()
MKDIR "tmp"
KILL "tmp\*.html"
ShowMainDlg()
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO START_NEW
CONTROL SET TEXT CB.HNDL, 991, _
"This program allows you to make an offline, searchable, responsive web table " _
+ "of your AliExpress purchases." _
+ $CRLF _
+ $CRLF _
+ "To proceed, open AliExpress in your PC browser (IE Edge Chrome Firefox...) " _
+ "and connect to your AliExpress account then go to 'My Orders'." _
+ $CRLF _
+ $CRLF _
+ "When you are ready click on 'Next'."
CONTROL ADD BUTTON, CB.HNDL, 1001, "Next", 320-8-80, 200-8-24, 80, 24
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO START_UPDATE
UPD = -1
CONTROL SET TEXT CB.HNDL, 991, _
"This program allows you to make an offline, searchable, responsive, web table " _
+ "of your AliExpress purchases." _
+ $CRLF _
+ $CRLF _
+ "We detected an existing 'AliExpress Orders.html', " _
+ "would you like to update it with recent purchases ? "
CONTROL ADD BUTTON, CB.HNDL, 2001, "YES", 320-8-80, 200-8-24, 80, 24
CONTROL ADD BUTTON, CB.HNDL, 2002, "No", 320-8-160-8, 200-8-24, 80, 24
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO SHOW_ANIM
CONTROL SET SIZE CB.HNDL, 991, 320-16, 60
CONTROL ADD IMAGE, CB.HNDL, 9001, "CPY", 36, 96, 50, 56
CONTROL ADD IMAGE, CB.HNDL, 9002, "PST", 233, 98, 46, 53
FOR i = 1 TO 4 ' 9003 to 9006
CONTROL ADD IMAGE, CB.HNDL, 9002+i, "PG0", 107+29*(i-1), 119, 17, 17
NEXT
CONTROL ADD GRAPHIC, CB.HNDL, 9007, "", 107, 87, 110, 24
idEvent = SetTimer(CB.HNDL, %WM_USER, 250, 0)
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO HIDE_ANIM
MACROTEMP k
DIM k AS LONG
FOR k = 9001 TO 9007
CONTROL KILL CB.HNDL, k ' Destroy all animation elements
DIALOG DOEVENTS
NEXT
CONTROL KILL CB.HNDL, 1003 ' and Cancel button
CONTROL SET SIZE CB.HNDL, 991, 320-16, 200-16-24
DIALOG DOEVENTS
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO ANIM_PRINT(txt, col)
GRAPHIC ATTACH CB.HNDL, 9007
GRAPHIC CLEAR
GRAPHIC COLOR col
GRAPHIC PRINT txt
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO LIGHTS_ON
MACROTEMP k
DIM k AS LONG
FOR k = 1 TO 4
CONTROL SET IMAGE CB.HNDL, 9002+k, "PG1"
DIALOG DOEVENTS
NEXT
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO LIGHTS_OFF
MACROTEMP k
DIM k AS LONG
FOR k = 1 TO 4
CONTROL SET IMAGE CB.HNDL, 9002+k, "PG0"
DIALOG DOEVENTS
NEXT
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO ANIM_FLASH
MACROTEMP k
DIM k AS LONG
FOR k = 1 TO 3
LIGHTS_ON()
SLEEP 500
LIGHTS_OFF()
SLEEP 500
NEXT
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO SHOW_FINAL_ANIM
CONTROL KILL CB.HNDL, 9001 ' Left image
DIALOG DOEVENTS
CONTROL KILL CB.HNDL, 9002 ' Right image
DIALOG DOEVENTS
CONTROL DISABLE CB.HNDL, 1003 ' Cancel button
n = 0 ' Re-start the WIP animation
idEvent = SetTimer(CB.HNDL, %WM_USER, 250, 0)
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO FINAL_SCREEN
HIDE_ANIM()
IF UPD THEN ' UPDATE MODE FINISHED
IF nitem = 0 THEN
CONTROL SET TEXT CB.HNDL, 991, _
" No new order found :)" _
+ $CRLF _
+ $CRLF _
+ "Your offline, searchable, responsive, web table of " _
+ "AliExpress purchases is already up-to-date !" _
+ $CRLF _
+ $CRLF _
+ "Do you want to view the table now ?"
ELSE
CONTROL SET TEXT CB.HNDL, 991, _
"Your offline, searchable, responsive, web table of " _
+ "AliExpress purchases has successfully been updated !" _
+ $CRLF _
+ $CRLF _
+ FORMAT$(nitem)+" new item(s) were added." _
+ $CRLF _
+ $CRLF _
+ "The rating for the new orders are still randomized. " _
+ "If you want to give them a correct rating, open the Html file " _
+ "in an editor such as Notepad, and change the numbers after " _
+ "each occurence of: <span class='stars'>" _
+ $CRLF _
+ $CRLF _
+ "Do you want to view your AliExpress Orders table now ?"
END IF
ELSE ' NEW TABLE MODE FINISHED
CONTROL SET TEXT CB.HNDL, 991, _
"The offline, searchable, responsive, web table of your " _
+ "AliExpress purchases has successfully been generated !" _
+ $CRLF _
+ $CRLF _
+ FORMAT$(nitem)+" items were found across " + FORMAT$(pgIdx)+" pages." _
+ $CRLF _
+ $CRLF _
+ "By default the rating for each order has been randomized. " _
+ "If you want to give a correct rating, open the Html file " _
+ "in an editor such as Notepad, and change the numbers after " _
+ "each occurence of: <span class='stars'>" _
+ $CRLF _
+ $CRLF _
+ "Do you want to view your AliExpress Orders table now ?"
END IF
CONTROL ADD BUTTON, CB.HNDL, 3001, "VIEW", 320-8-80, 200-8-24, 80, 24
CONTROL ADD BUTTON, CB.HNDL, 3002, "Locate", 320-8-160-8, 200-8-24, 80, 24
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
CALLBACK FUNCTION ProcMainDlg
LOCAL e, s AS STRING
LOCAL i, j AS LONG
STATIC hThread AS DWORD
STATIC idEvent AS LONG
STATIC n AS LONG
STATIC pgIdx, pgTot AS LONG
IF CB.MSG = %WM_INITDIALOG THEN ' Are we in UPDATE mode or in FIRST-USE mode ?
e = DIR$("AliExpress Orders.html") : DIR$ CLOSE
IF e = "" THEN ' FIRST-USE mode
START_NEW()
ELSE ' UPDATE mode
START_UPDATE()
END IF
ELSEIF CB.MSG = %WM_COMMAND THEN
SELECT CASE AS LONG CB.CTL
'===========================================================================================
CASE 1001, 2001 ' START NEW / UPDATE > INSTRUCTIONS
CONTROL KILL CB.HNDL, 1001
CONTROL KILL CB.HNDL, 2001
CONTROL KILL CB.HNDL, 2002
CONTROL SET TEXT CB.HNDL, 991, _
"If you have a lot of orders, we suggest that you display " _
+ "them ""30/page"" from the drop-down control near the top of the list." _
+ $CRLF _
+ $CRLF _
+ "When you are ready click on 'Next'."
CONTROL ADD BUTTON, CB.HNDL, 1002, "Next", 320-8-80, 200-8-24, 80, 24
'===========================================================================================
CASE 1002 ' START NEW / UPDATE > WIP
CONTROL KILL CB.HNDL, 1002
CONTROL SET TEXT CB.HNDL, 991, _
"- Hit [ Ctrl + U ] in the Orders page to view its source code" _
+ $CRLF _
+ "- Hit [ Ctrl + A ] to select all the code (after it is displayed 100%)" _
+ $CRLF _
+ "- Hit [ Ctrl + C ] to copy the source code to the clipboard"
CONTROL ADD BUTTON, CB.HNDL, 1003, "Cancel", 320-8-80, 200-8-24, 80, 24
SHOW_ANIM()
ANIM_PRINT("Expected: page 1/??", %BLUE)
'===========================================================================================
CASE 1003 ' START NEW / UPDATE > CANCEL
CONTROL KILL CB.HNDL, 1003
IF idEvent THEN KillTimer CB.HNDL, idEvent
HIDE_ANIM()
pgIdx = 0
pgTot = 0
IF UPD THEN
START_UPDATE()
ELSE
START_NEW()
END IF
'===========================================================================================
CASE 2002 ' UPDATE EXISTING WITH NEW PURCHASES ? > 'NO'
CONTROL KILL CB.HNDL, 2001
CONTROL KILL CB.HNDL, 2002
CONTROL SET TEXT CB.HNDL, 991, _
"Are you sure you want to start from new and erase (overwrite) " _
+ "your existing table of purchases ?"
CONTROL ADD BUTTON, CB.HNDL, 2003, "ERASE", 320-8-80, 200-8-24, 80, 24
CONTROL ADD BUTTON, CB.HNDL, 2004, "Prev.", 320-8-160-8, 200-8-24, 80, 24
'===========================================================================================
CASE 2003 ' OVERWRITE EXISTING TABLE
CONTROL KILL CB.HNDL, 2003
CONTROL KILL CB.HNDL, 2004
KILL "AliExpress Orders.html"
UPD = 0
START_NEW()
'===========================================================================================
CASE 2004 ' DO NOT OVERWRITE EXISTING TABLE
CONTROL KILL CB.HNDL, 2003
CONTROL KILL CB.HNDL, 2004
START_UPDATE()
'===========================================================================================
CASE 3001 ' VIEW ORDERS TABLE
ShellExecute %NULL, "open", "AliExpress Orders.html", $NUL, $NUL, %SW_SHOW
'===========================================================================================
CASE 3002 ' LOCATE ORDERS TABLE
ShellExecute %NULL, "open", "explorer.exe" + $NUL, _
"/select,""AliExpress Orders.html""", $NUL, %SW_SHOW
'===========================================================================================
CASE %IDCANCEL ' USER PRESSED 'ESC' > EXIT
DIALOG END CB.HNDL
EXITPROCESS 12345 ' terminate ourself
EXIT FUNCTION
END SELECT
'===========================================================================================
ELSEIF CB.MSG = %WM_TIMER THEN
' DO THE ANIMATION
IF n > 0 THEN CONTROL SET IMAGE CB.HNDL, 9002+n, "PG0"
n = (n MOD 4) + 1
CONTROL SET IMAGE CB.HNDL, 9002+n, "PG1"
IF hThread <> 0 THEN
THREAD STATUS hThread TO i ' CHECK ON 'MAKE_AE' THREAD
IF i <> &H103 AND i <> 0 THEN
KillTimer CB.HNDL, idEvent
THREAD CLOSE hThread TO i
hThread = 0
FINAL_SCREEN()
EXIT FUNCTION
END IF
END IF
CLIPBOARD GET TEXT TO e ' WAIT FOR SOURCE CODE IN CLIPBOARD
IF INSTR(e, "<html>") > 0 AND _
INSTR(e, "Alibaba Manufacturer Directory") > 0 AND _
INSTR(e, "<label class=""ui-label") > 0 AND _
INSTR(e, "</html>") > 0 THEN
KillTimer CB.HNDL, idEvent ' Pause the timer event in order to do treatment...
DIALOG SEND CB.HNDL, %WM_USER, 0, 0
END IF
'===========================================================================================
ELSEIF CB.MSG = %WM_USER THEN ' TREAT CONTENT IN CLIPBOARD
ANIM_PRINT("TREATING ORDERS", RGB(30,198,0))
LIGHTS_OFF()
SendString "{CTRL_D}w{CTRL_U}" ' Close source code page
ShowWindow CB.HNDL, 6 : ShowWindow CB.HNDL, 1 ' and show AE dialog on top
DIALOG DOEVENTS ' Force dialog redraw
DIALOG REDRAW CB.HNDL
DIALOG DOEVENTS
CLIPBOARD GET TEXT TO e : e = UnixToWinEOL(e) ' Get clipboard content then clear it
CLIPBOARD RESET
i = INSTR(e, "<label class=""ui-label") ' Check if we have the correct page
i = INSTR(i+1, e, ">") + 1
j = INSTR(i+1, e, "<")
s = MID$(e, i, j-i)
IF pgTot = 0 THEN pgTot = VAL(MID$(s, INSTR(s, "/")+1))
j = VAL(LEFT$(s, INSTR(s, "/")-1))
FOR i = 1 TO pgTot ' Special hack for fast re-build of orders table
s = DIR$(TMPFILE(i)) : DIR$ CLOSE
IF s = "" THEN EXIT FOR
NEXT
IF s <> "" AND INSTR(TMPFILE(pgTot), s) > 0 THEN
IF MSGBOX( "Do a fast re-build of the table " _
+ "from " + FORMAT$(pgTot) + " pages ?" _
, %MB_ICONQUESTION OR %MB_YESNO _
, EXE.NAME$) = %IDYES THEN
pgIdx = pgTot - 1
j = pgIdx + 1
OPEN TMPFILE(pgTot) FOR BINARY ACCESS READ AS #i
GET$ #i, LOF(#i), e
CLOSE #i
END IF
END IF
IF j <> pgIdx + 1 THEN ' Wrong page: show error message & wait for user to try again
ANIM_PRINT("Error: wrong page", %RED)
ANIM_FLASH() ' 3s flashing animation
ANIM_PRINT("Expected: page "+FORMAT$(pgIdx+1) _
+"/"+FORMAT$(pgTot), %BLUE)
n = 0
idEvent = SetTimer(CB.HNDL, %WM_USER, 250, 0)
EXIT FUNCTION
END IF
INCR pgIdx ' Correct page: create the temporary page on disk
i = FREEFILE
KILL TMPFILE(pgIdx)
OPEN TMPFILE(pgIdx) FOR BINARY ACCESS WRITE AS #i
PUT$ #i, e
CLOSE #i
ANIM_FLASH() ' Do a nice 3s animation and move on
IF UPD THEN ' UPDATE mode > look if we've reached a known order reference
IF ISTRUE ReachedExistingRef(pgIdx) THEN
ANIM_PRINT("UPDATING TABLE", RGB(30,198,0))
SHOW_FINAL_ANIM()
THREAD CREATE MAKE_AE(CB.HNDL) TO hThread
EXIT FUNCTION
END IF
END IF
IF pgIdx = pgTot THEN ' We have reached the last page > make the orders table
ANIM_PRINT("GENERATING TABLE", RGB(30,198,0))
SHOW_FINAL_ANIM()
THREAD CREATE MAKE_AE(CB.HNDL) TO hThread
EXIT FUNCTION
ELSEIF pgIdx = 1 THEN ' Slightly modify the instructions for page 2 and onward
CONTROL SET TEXT CB.HNDL, 991, _
"Use the right arrow to go to the next page of your orders, then" _
+ $CRLF _
+ "- Hit [ Ctrl + U ] in the Orders page to view its source code" _
+ $CRLF _
+ "- Hit [ Ctrl + A ] to select all the code (after it is displayed 100%)" _
+ $CRLF _
+ "- Hit [ Ctrl + C ] to copy the source code to the clipboard"
END IF
ANIM_PRINT("Expected: page "+FORMAT$(pgIdx+1) _ ' Display the next page number to be imported
+"/"+FORMAT$(pgTot), %BLUE)
n = 0 ' Re-start the WIP animation
idEvent = SetTimer(CB.HNDL, %WM_USER, 250, 0)
END IF
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION ShowMainDlg() AS LONG
LOCAL hD AS DWORD
DIALOG NEW PIXELS, 0, EXE.NAME$,,, 320, 200, _
%DS_MODALFRAME OR %WS_CAPTION OR %WS_POPUP OR _
%WS_SYSMENU OR %WS_MINIMIZEBOX, TO hD
DIALOG SET ICON hD, "ICO1"
CONTROL ADD LABEL, hD, 991, "", 8, 8, 320-16, 200-16-24
CONTROL ADD BUTTON, hD, %IDCANCEL, "Cancel", -10, -10, 0, 0
DIALOG SHOW MODAL hD, CALL ProcMainDlg
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO FIND_STR(what)
DO
LINE INPUT #ff, e
LOOP UNTIL EOF(#ff) OR INSTR(LCASE$(e), LCASE$(what)) <> 0
IF EOF(#ff) THEN DECR nitem : GOTO NextHtml
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO REDIM_AR()
INCR nitem
REDIM PRESERVE oid(nitem)
REDIM PRESERVE dat(nitem)
REDIM PRESERVE eur(nitem)
REDIM PRESERVE sta(nitem)
REDIM PRESERVE img(nitem)
REDIM PRESERVE des(nitem)
REDIM PRESERVE opn(nitem)
REDIM PRESERVE sto(nitem)
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO RMV_AR(i)
MACROTEMP k
DIM k AS LONG
FOR k = UBOUND(oid) - 1 TO i STEP -1
oid(k) = oid(k+1)
dat(k) = dat(k+1)
eur(k) = eur(k+1)
sta(k) = sta(k+1)
img(k) = img(k+1)
des(k) = des(k+1)
opn(k) = opn(k+1)
sto(k) = sto(k+1)
NEXT
DECR nitem
REDIM PRESERVE oid(nitem)
REDIM PRESERVE dat(nitem)
REDIM PRESERVE eur(nitem)
REDIM PRESERVE sta(nitem)
REDIM PRESERVE img(nitem)
REDIM PRESERVE des(nitem)
REDIM PRESERVE opn(nitem)
REDIM PRESERVE sto(nitem)
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
MACRO READ_LIN(n)
FOR k = 1 TO n
LINE INPUT #ff, e
NEXT
END MACRO
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION TranslateDate(BYVAL e AS STRING) AS STRING
LOCAL r AS STRING
LOCAL i, j AS LONG
i = INSTR(-1, LCASE$(e), "</span>")
IF i = 0 THEN EXIT FUNCTION
r = MID$(e, i-4, 4) + "-" ' Year
IF INSTR(e, "Jan.") > 0 THEN r += "01" ' Month
IF INSTR(e, "Feb.") > 0 THEN r += "02"
IF INSTR(e, "Mar.") > 0 THEN r += "03"
IF INSTR(e, "Apr.") > 0 THEN r += "04"
IF INSTR(e, "May.") > 0 THEN r += "05"
IF INSTR(e, "Jun.") > 0 THEN r += "06"
IF INSTR(e, "Jul.") > 0 THEN r += "07"
IF INSTR(e, "Aug.") > 0 THEN r += "08"
IF INSTR(e, "Sep.") > 0 THEN r += "09"
IF INSTR(e, "Oct.") > 0 THEN r += "10"
IF INSTR(e, "Nov.") > 0 THEN r += "11"
IF INSTR(e, "Dec.") > 0 THEN r += "12"
i = INSTR(e, ".")
IF i = 0 THEN EXIT FUNCTION
i += 2
j = INSTR(i, e, " ")
IF j = 0 THEN EXIT FUNCTION
r += "-" + MID$(e, i, j-i) ' Day
FUNCTION = r
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION InBetween(BYVAL e AS STRING, BYVAL delim1 AS STRING, BYVAL delim2 AS STRING) AS STRING
LOCAL i, j AS LONG
i = INSTR(e, delim1)
IF i = 0 THEN EXIT FUNCTION ELSE i += LEN(delim1)
j = INSTR(i, e, delim2)
IF j = 0 THEN EXIT FUNCTION
FUNCTION = MID$(e, i, j-i)
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION UnixToWinEOL(BYVAL e AS STRING) AS STRING
IF TALLY(e, $CRLF) < TALLY(e, $LF) THEN
REPLACE $CR WITH $CRLF IN e
REPLACE $LF WITH $CRLF IN e
REPLACE $LF+$LF WITH $LF IN e
REPLACE $CR+$CR WITH $CR IN e
END IF
WHILE INSTR(e, $CRLF+$TAB) > 0 ' Remove leading Tabs
REPLACE $CRLF+$TAB WITH $CRLF IN e
WEND
WHILE INSTR(e, $CRLF+$SPC) > 0 ' Remove leading Spaces
REPLACE $CRLF+$SPC WITH $CRLF IN e
WEND ' Replace Tabs with Spaces
REPLACE $TAB WITH $SPC IN e
WHILE INSTR(e, $CRLF+$CRLF) > 0 ' Remove empty lines
REPLACE $CRLF+$CRLF WITH $CRLF IN e
WEND
FUNCTION = e
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION ReachedExistingRef(BYVAL nn AS LONG) AS LONG
' Have we reached an order ref. ID in "tmp\AE_orders_nn.html"
' that already exists in "AliExpress Orders.html" ?
LOCAL ff AS LONG
LOCAL aeo AS STRING
LOCAL e, oid AS STRING
' Get existing AE orders
ff = FREEFILE
OPEN "AliExpress Orders.html" FOR BINARY AS #ff
GET$ #ff, LOF(#ff), aeo
CLOSE #ff
' Analyze temp file #nn
ff = FREEFILE
OPEN TMPFILE(nn) FOR INPUT AS #ff
AnaRer:
DO
LINE INPUT #ff, e
LOOP UNTIL EOF(#ff) OR INSTR(LCASE$(e), "order-info") > 0
IF EOF(#ff) THEN GOTO EndReR
DO
LINE INPUT #ff, e
LOOP UNTIL EOF(#ff) OR INSTR(LCASE$(e), "info-body") > 0
IF EOF(#ff) THEN GOTO EndReR
oid = InBetween(e, ">", "<")
IF INSTR(aeo, "<!--" + oid + "-->") > 0 THEN
FUNCTION = -1
GOTO EndReR
END IF
GOTO AnaRer ' loop for next order
EndReR:
CLOSE #ff
EXIT FUNCTION
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
THREAD FUNCTION MAKE_AE (BYVAL hDlg AS LONG) AS LONG
LOCAL oid() AS STRING
LOCAL dat() AS STRING
LOCAL eur() AS STRING
LOCAL sta() AS STRING
LOCAL img() AS STRING
LOCAL des() AS STRING
LOCAL opn() AS STRING
LOCAL sto() AS STRING
LOCAL ff, nhtml, i, j, k AS LONG
LOCAL e, old, aeo AS STRING
' Count html files
DO
INCR i
e = DIR$(TMPFILE(i))
DIR$ CLOSE
LOOP UNTIL e = ""
nhtml = i - 1
' No html files
IF nhtml = 0 THEN FUNCTION = 2 : EXIT FUNCTION
' Initialize arrays
DIM oid(0) : DIM dat(0) : DIM sto(0) : DIM eur(0)
DIM img(0) : DIM des(0) : DIM opn(0) : DIM sta(0)
nitem = 0
' Parse each html file
FOR i = 1 TO nhtml
ff = FREEFILE
OPEN TMPFILE(i) FOR INPUT AS #ff
FIND_STR("<table")
NewItem:
REDIM_AR() ' redimension all arrays
' Extract Order Id
FIND_STR("first-row")
READ_LIN(2)
oid(nitem) = InBetween(e, ">", "<")
' Extract Date in format YYYY-MM-DD
FIND_STR("second-row")
READ_LIN(2) ' "00:05 May. 18 2020"
dat(nitem) = TranslateDate(e)
' Extract Store Name and Link
FIND_STR("store-info")
READ_LIN(3)
sto(nitem) = InBetween(e, ">", "<")
FIND_STR("second-row")
READ_LIN(1)
sto(nitem) = "<a target='_blank' href='https://" + InBetween(e, "//", $DQ) + "'>" + sto(nitem) + "</a>"
' Extract item amount
FIND_STR("amount-num")
READ_LIN(1)
eur(nitem) = TRIM$(e)
' Extract image
FIND_STR("<img")
e = InBetween(e, $DQ, $DQ)
img(nitem) = "<img src='" + e + "'>"
e = REMOVE$(e, "_50x50.jpg")
e = REMOVE$(e, "_50x50.png")
img(nitem) = "<a target='_blank' href='" + e + "'>" + img(nitem) + "</a>"
' Extract Item Description and Link
FIND_STR("product-title")
READ_LIN(1)
des(nitem) = "<a target='_blank' href='https://" + InBetween(e, "//", $DQ) + "'>" + InBetween(e, ">", "<") + "</a>"
REPLACE $DQ WITH "'" IN des(nitem)
' Extract Item Options
FIND_STR("product-property")
READ_LIN(3)
e = TRIM$(e)
IF LEFT$(e, 1) <> "<" THEN opn(nitem) = e
' Extract Order Status
FIND_STR("order-status")
READ_LIN(3)
sta(nitem) = TRIM$(e)
GOTO NewItem
NextHtml:
CLOSE #ff
NEXT
IF UPD THEN GOTO UpdateAE ' Redirect to specific treatment if we just update
ff = FREEFILE ' Else we build the orders table from scratch here:
OPEN "AliExpress Orders.html" FOR OUTPUT AS #ff
PRINT #ff, "<!DOCTYPE html>"
PRINT #ff, "<html lang='en'>"
PRINT #ff, "<head>"
PRINT #ff, "<meta charset='UTF-8'>"
PRINT #ff, "<meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'>"
PRINT #ff, "<meta http-equiv='x-ua-compatible' content='ie=edge'>"
PRINT #ff, "<title>My AliExpress Orders</title>"
PRINT #ff, "<link rel='icon' href='https://ae01.alicdn.com/images/eng/wholesale/icon/aliexpress.ico' type='image/x-icon'>"
PRINT #ff, "<link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.11.2/css/all.css'>"
PRINT #ff, "<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap'>"
PRINT #ff, "<link rel='stylesheet' href='http://mougino.free.fr/ae/css/bootstrap.min.css'>"
PRINT #ff, "<link rel='stylesheet' href='http://mougino.free.fr/ae/css/mdb.min.css'>"
PRINT #ff, "<link rel='stylesheet' href='http://mougino.free.fr/ae/css/style.css'>"
PRINT #ff, "<link href='http://mougino.free.fr/ae/css/addons/datatables.min.css' rel='stylesheet'>"
PRINT #ff, "<style>.centered{margin:auto; width: 90%}</style>"
PRINT #ff, "<style>span.stars,span.stars span{font-size:0;display:block;background:url(http://mougino.free.fr/ae/stars.png) " _
+ "0 -16px repeat-x;width:80px;height:16px}span.stars span{background-position:0 0}</style>"
PRINT #ff, "</head><body>"
PRINT #ff, "<br>"
PRINT #ff, "<div class='centered'>"
PRINT #ff, "<h2>My AliExpress Orders</h2>"
PRINT #ff, "<table id='ae' class='table'>"
PRINT #ff, "<thead><tr>"
PRINT #ff, "<th class='th-sm'>#</th>"
PRINT #ff, "<th class='th-sm'>Date</th>"
PRINT #ff, "<th class='th-sm'>Price</th>"
PRINT #ff, "<th class='th-sm'>Status</th>"
PRINT #ff, "<th class='th-sm'>Image</th>"
PRINT #ff, "<th class='th-sm'>Description</th>"
PRINT #ff, "<th class='th-sm'>Options</th>"
PRINT #ff, "<th class='th-sm'>Store</th>"
PRINT #ff, "<th class='th-sm'>Rating</th>"
PRINT #ff, "</tr></thead><tbody>"
FOR i = 1 TO nitem
PRINT #ff, "<!--" + oid(i) + "-->"
PRINT #ff, "<tr>"
PRINT #ff, "<td>" + FORMAT$(nitem - i + 1) + "</th>"
PRINT #ff, "<td>" + dat(i) + "</td>"
PRINT #ff, "<td>" + eur(i) + "</td>"
PRINT #ff, "<td>" + sta(i) + "</td>"
PRINT #ff, "<td>" + img(i) + "</td>"
PRINT #ff, "<td>" + des(i) + "</td>"
PRINT #ff, "<td>" + opn(i) + "</td>"
PRINT #ff, "<td>" + sto(i) + "</td>"
PRINT #ff, "<td><span class='stars'>" _
+ FORMAT$(INT(5*RND()*100)/100) _
+ "</span></td>"
PRINT #ff, "</tr>"
NEXT
PRINT #ff, "<tfoot><tr>"
PRINT #ff, "<th>#</th>"
PRINT #ff, "<th>Date</th>"
PRINT #ff, "<th>Price</th>"
PRINT #ff, "<th>Status</th>"
PRINT #ff, "<th>Image</th>"
PRINT #ff, "<th>Description</th>"
PRINT #ff, "<th>Options</th>"
PRINT #ff, "<th>Store</th>"
PRINT #ff, "<th>Rating</th>"
PRINT #ff, "</tr></tfoot></table></div>"
PRINT #ff, "<script type='text/javascript' src='http://mougino.free.fr/ae/js/jquery.min.js'></script>"
PRINT #ff, "<script type='text/javascript' src='http://mougino.free.fr/ae/js/popper.min.js'></script>"
PRINT #ff, "<script type='text/javascript' src='http://mougino.free.fr/ae/js/bootstrap.min.js'></script>"
PRINT #ff, "<script type='text/javascript' src='http://mougino.free.fr/ae/js/mdb.min.js'></script>"
PRINT #ff, "<script type='text/javascript' src='http://mougino.free.fr/ae/js/addons/datatables.min.js'></script>"
PRINT #ff, "<script>$.fn.stars=function(){return $(this).each(function(){var t=parseFloat($(this).html())," _
+ "a=16*Math.max(0,Math.min(5,t)),h=$('<span />').width(a).text(parseInt(t*100));$(this).html(h)})};</script>"
PRINT #ff, "<script>$(document).ready(function(){$('span.stars').stars();" _
+ "$('#ae').DataTable();$('.dataTables_length').addClass('bs-select');});</script>"
PRINT #ff, "</body></html>"
CLOSE#ff
FUNCTION = 1
EXIT FUNCTION
UpdateAE:
'---------------------------------------------------------------------------------------
KILL "AliExpress Orders.bkp"
NAME "AliExpress Orders.html" AS "AliExpress Orders.bkp"
' Get existing AE orders
ff = FREEFILE
OPEN "AliExpress Orders.bkp" FOR BINARY AS #ff
GET$ #ff, LOF(#ff), aeo
CLOSE #ff
' Remove existing orders from the list
FOR i = nitem TO 1 STEP -1
IF INSTR(aeo, "<!--" + oid(i) + "-->") > 0 THEN
RMV_AR(i)
END IF
NEXT
IF nitem = 1 AND INSTR(aeo, "<!--" + oid(1) + "-->") > 0 THEN
DECR nitem
FUNCTION = 1
EXIT FUNCTION
END IF
' Now update the orders table!
e = ""
FOR i = 1 TO nitem
e += "<!--" + oid(i) + "-->" + $CRLF
e += "<tr>" + $CRLF
e += "<td>" + FORMAT$(nitem - i + 1) + "</th>" + $CRLF
e += "<td>" + dat(i) + "</td>" + $CRLF
e += "<td>" + eur(i) + "</td>" + $CRLF
e += "<td>" + sta(i) + "</td>" + $CRLF
e += "<td>" + img(i) + "</td>" + $CRLF
e += "<td>" + des(i) + "</td>" + $CRLF
e += "<td>" + opn(i) + "</td>" + $CRLF
e += "<td>" + sto(i) + "</td>" + $CRLF
e += "<td><span class='stars'>" _
+ FORMAT$(INT(5*RND()*100)/100) _
+ "</span></td>" + $CRLF
e += "</tr>" + $CRLF
NEXT
k = INSTR(aeo, "<!--")
aeo = LEFT$(aeo, k-1) + e + MID$(aeo, k)
' And write it to disk
KILL "AliExpress Orders.html"
ff = FREEFILE
OPEN "AliExpress Orders.html" FOR BINARY AS #ff
PUT$ #ff, aeo
CLOSE #ff
FUNCTION = 1
EXIT FUNCTION
END FUNCTION
'---------------------------------------------------------------------------------------