Lấy dữ liệu cổ phiếu từ Website Cafef.vn về Excel

Liên hệ QC
Dạ em xin lỗi, có gì không phải mong bác bỏ qua ạ, em cũng gà mới chập chững thôi. Mong các bác chỉ dạy thêm ạ!
Hehe… không có nói bạn, tôi nói cái ông thánh nổ thôi.

Và rốt cuộc thánh nổ làm không được đề bài #84 mà mình đã trót nổ nên lấp liếm cho qua… Mà cũng đúng thôi, học code chục năm, viết xong “cất vô kho” vì có nào người dùng trên đây xài được đâu. Thánh đâu có ý tưởng, có tự nghĩ ra được viết cái gì mà chỉ chờ sản phẩm của người khác rồi bắt chước chuyển đồi sang code Delphi “hiện đại” và hô to code đơn giản quá, cái nào làm không được thì bảo là “Game này không thú vị nên không cần làm”… Phim này chiếu hoài . Nói chung đọc các bài viết tự sướng, như xem phim hài.
 
Lần chỉnh sửa cuối:
Em có một vài ý kiến cá nhân như này ạ:
1. Không nên công kích cá nhân.
2. Việc tác giả viết "JSON Converter for VBA" để Các hàm JSON parsing/serializing có cú pháp đơn giản và dễ tiếp cận cho người dùng VBA. Nó áp dụng cho nhiều trường hợp khác nhau nên code nó dài là đúng thôi. Ví dụ ta cần phép tính 100*101 trong bảng tính thì tính thì tính nhẩm hoặc dùng máy tính bỏ túi casio cũng được, nhưng nếu dùng Excel cũng chẳng sao. Không vì thế mà nói Excel là quá nặng và vớ vẩn!
đúng như thế nhưng áp dụng cho đọc và ghi dữ liệu Google Sheets là không cần thiết

1/ Viết một hàm ngay trên VBA khoãng trên 10 dòng code tách lấy AccessToken và refreshToken không trên 10 dòng code là nhiều nếu viết gọn lại còn ít hơn

2/ Tách File JSON lấy thông tin cũng vậy khoãng tâm 10 dòng là xong

Hai mục trên thuần VBA sử dụng Fso của Ms ai nhìn vào cũng biết ... vậy có cần thiết ap dụng cho Việc đọc và ghi dữ liệu lên Google Sheets sử dụng cái Module đó trên 1000 dòng code ????

3/ Ghi lên hay lấy về không cần thiết sử dụng Module đó
Bài đã được tự động gộp:

xem link sau ... hình sau lỗi nhúng Web vào From lấy AccessToken ... nhưng đã bị Google chặn nên không sử dụng được nữa

có lẻ do viết mấy năm trước khi Google chưa chặn vì lý do bảo mật


1727680935535.png

khi tải file về chỉnh sửa một Tí chạy mã nó sẻ lên là

1727681052593.png

Nhưng không sử dụng được vì Google đã chặn nhúng các Trình duyệt lấy AccessToken ...Vì lý do an toàn và bảo mật
 
Lần chỉnh sửa cuối:
Thay vì sử dụng cái Module trên 1000 dòng code chỉ sử dụng tách lấy AsscesToken ... thì viết lại thuần VBA khoãng trên 10 dòng code khi khi trả về response của Http thay thế hàm Set objJson = JsonConverter.ParseJson(.ResponseText)

Vì vậy không cần thiết sử dụng Module đó ... tác giả file này đang có bài viết tại thớt này luôn

Mã:
Public Function GetAccessToken() As String
    Dim objBrowser As UserForm1
    Dim objWinHttp As WinHttp.WinHttpRequest
    Dim strURL As String
    Dim strRequestBody As String
    Dim strAuthorizationCode As String
    Dim strFile As String
    Dim strFolder As String
    Dim strAccessToken As String
    Dim objReg As RegistryUtility
    Dim objJson As Scripting.Dictionary
    Dim objFSO As Scripting.FileSystemObject
    Dim objFile As Scripting.TextStream
    Set objFSO = New Scripting.FileSystemObject
    Set objReg = New RegistryUtility
    Set objBrowser = New UserForm1
    strFolder = Environ$("APPDATA") & "\" & ApplicationName
    strFile = strFolder & "\client_id_" & ClientID & ".token-response"
    strURL = "https://accounts.google.com/o/oauth2/v2/auth?scope=" & URLEncode(Join(Scope, " ")) & "&access_type=offline&include_granted_scopes=true&response_type=code&state=state_parameter_passthrough_value&redirect_uri=https%3A//localhost&client_id=" & ClientID
    objBrowser.ClientID = ClientID
    objBrowser.ApplicationName = ApplicationName
    objBrowser.WebBrowser1.Navigate strURL
    objBrowser.Show vbModal
    If objReg.RegValueExists("HKEY_CURRENT_USER\Software\GoogleOAuth2VBA\" & ApplicationName & "\" & ClientID & "\AuthorizationCode") Then
        strAuthorizationCode = objReg.ReadRegValue("HKEY_CURRENT_USER\Software\GoogleOAuth2VBA\" & ApplicationName & "\" & ClientID & "\AuthorizationCode")
        objReg.DeleteRegKey HKEY_CURRENT_USER, "Software\GoogleOAuth2VBA\" & ClientID & "\AuthorizationCode"
    End If
    If strAuthorizationCode <> vbNullString Then
        strRequestBody = "code=" & strAuthorizationCode & "&" & _
                        "client_id=" & ClientID & "&" & _
                        "client_secret=" & ClientSecret & "&" & _
                        "redirect_uri=https%3A//localhost&" & _
                        "grant_type=authorization_code"
        Set objWinHttp = New WinHttp.WinHttpRequest
        With objWinHttp
            .Open "POST", "https://oauth2.googleapis.com/token", False
            .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
            .SetRequestHeader "Accept", "application/json'"
            .Send strRequestBody
            If .Status = 200 Then
                Set objJson = JsonConverter.ParseJson(.ResponseText)
                strAccessToken = objJson.Item("access_token")
                If strAccessToken <> vbNullString Then
                    GetAccessToken = strAccessToken
                    Set objFile = objFSO.CreateTextFile(strFile, True)
                    objFile.Write .ResponseText
                    objFile.Close
                    objReg.WriteRegValue "HKEY_CURRENT_USER\Software\GoogleOAuth2VBA\" & ApplicationName & "\" & ClientID & "\AccessTokenExpirationTime", CStr(DateAdd("s", CDbl(objJson.Item("expires_in")), Now)), REG_SZ
                Else: Err.Raise vbObjectError + 2, , "Failed to get access code"
                End If
            End If
        End With
    Else
        Err.Raise vbObjectError + 1, , "Failed to obtain the authorization code."
    End If
End Function
 
Ban nick @Kiều Mạnh 1 tháng vì mạt sát thành viên khác nặng lời.
Những bài trên của vài người khác cũng có ngôn từ công kích, mạt sát. Chẳng hạn như gọi code của người khác là rác. Đề nghị tranh luận với cái đầu tỉnh táo.
Tồi đồng ý và ủng hộ tuyệt đối ... nên như thế và phải nên như thế

Nhưng công bằng là được .. họ cũng công kích chứ không phải không công kích Tôi ??

Cảm ơn ... thoát
 
Web KT

Bài viết mới nhất

Back
Top Bottom