30/09/2018, 17:12

Một chút về get link mp3 zing

Chào mọi người. Lúc trước em có vô tình đọc được bài viết tự động bắt link tải mp3 của zing bằng Java. Em thử chuyển nó về C++. Cách thì đơn giản lắm . Mỗi tội em chưa biết về GUI, bị hạn chế về khả năng và đang vướng thi cuối kỳ nữa nên làm tạm cách thủ công: Copy link vào một file txt rồi đọc file ý
Sau một hồi nhờ anh google thì em tìm được hàm ShellExecute dùng để chạy application.
Các đại ca có thể xem code:

#include <fstream>
#include <string>
#include <windows.h>
using namespace std;

int main(){
    string link;
    ifstream file("link.txt");
    file >> link;
    size_t finds1 = link.find(".html");link.erase(finds1,5);
    size_t finds = link.find_last_of("/");link.erase(0,finds);
    string realLink= "http://v3.mp3.zing.vn/download/vip/song" + link;
    char* linkChar = new char[realLink.size()];
    for(int pos = 0;pos < realLink.size(); pos++){
        linkChar[pos] = realLink[pos];
    }
    ShellExecute(NULL, NULL, linkChar, NULL, NULL, SW_SHOWNORMAL);
}

Ví dụ em copy vào file txt link sau: http://mp3.zing.vn/bai-hat/Chu-Ech-Con-Nguyet-Hang/ZW607C7U.html
Thì sau khi chỉnh sửa nó sẽ được link để tải về: http://v3.mp3.zing.vn/download/vip/song/ZW607C7U
Nhưng mà khi chạy hàm ShellExecute thì nó lại khởi động trình duyệt bằng mấy kiểu link này:
http://v3.mp3.zing.vn/download/vip/song//ZW607C7U9Ø8? (cái phần %119Ø8? nó ở đâu ra ý )
Vậy có đại ca nào có thể nói cho em về ShellExecute và phần code trên được không ạ?
Em cảm ơn.
À còn một cái nữa, tuy là hỏi ngu nhưng chẳng lẽ không biết lại không hỏi :

#include <fstream>
using namespace std;

int main(){
    char* link;
    ifstream file("link.txt");
    getline(file,link);
}

Tại sao getline lại báo lối khi em dùng char* còn khi dùng string thì lại ngon ạ?
Em cảm ơn cái nữa ạ.

Thai Hoc Nguyen viết 19:25 ngày 30/09/2018

Theo mình getline dùng để nhập chuỗi nếu bạn sửa thành getline(cin, link) + cấp phát cho link thì mình tin nó sẽ chạy được ! đó là theo ý kiến của mình nếu sai mong bạn thông cảm

locdt viết 19:21 ngày 30/09/2018

Nhưng mà mình đang cần ở đây là nhập xuất trong file ý. String thì đc:

string str;
ifstream file("link.txt");
getline(file,str);

Mình thắc mắc là nếu thay string bằng char* thì làm thế nào để nhập từ file vào

*grab popcorn* viết 19:19 ngày 30/09/2018

Cài r làm ntn nữa nhỉ
Mình cài r chả thấy gì xuất hiện…

locdt viết 19:13 ngày 30/09/2018

Nhưng mà em đang không hiểu cái này này:
Nếu trực tiếp:

char* linkChar = "http://v3.mp3.zing.vn/download/vip/song/ZW70FEUW";
ShellExecute(NULL, "open", linkChar, NULL, NULL, SW_MINIMIZE);

thì nó chạy ngon re luôn. Còn như code trên của em khi cout xâu linkChar thì đúng, nhưng khi vào hàm ShellExecute thì lại khác

*grab popcorn* viết 19:22 ngày 30/09/2018

hàm shellexcute ko hỗ trợ string
nên bạn chỉ cần thêm đuôi str.c_str() là ok :>

locdt viết 19:13 ngày 30/09/2018

Tks anh. Ngon rồi. Nhưng e vẫn thắc mắc là nếu chuyển string về như thế này:

string realLink= "http://v3.mp3.zing.vn/download/vip/song" + link;
char* linkChar = new char[realLink.size()];
for(int pos = 0;pos < realLink.size(); pos++){
       linkChar[pos] = realLink[pos];

thì sao khi shellexecute thằng linkChar em lại thấy linkChar bị thêm 1 vài phần tử khác ở cuối nữa???

*grab popcorn* viết 19:18 ngày 30/09/2018

Chắc lúc nhập vô bạn nhập dư 1 số kí tự khoảng trắng nên nó cấp phát động dư
Chứ mình test code bạn nhập bằng tay chạy ok lắm

Bài liên quan
0