QString Protocol::MsgSender::getGroupSig(QString gid, QString to_id) { if ( group_sigs_.contains(gid+to_id) ) return group_sigs_.value(gid+to_id); QString msg_sig_url = "/channel/get_c2cmsg_sig2?id="+ gid +"&to_uin=" + to_id + "&service_type=0&clientid=5412354841&psessionid=" + CaptchaInfo::instance()->psessionid() +"&t=" + QString::number(QDateTime::currentMSecsSinceEpoch()); QHttpRequestHeader header; QString host = "d.web2.qq.com"; header.setRequest("GET", msg_sig_url); header.addValue("Host", host); header.addValue("Content-Type", "utf-8"); header.addValue("Referer", "http://d.web2.qq.com/proxy.html?v=20110331002"); header.addValue("Cookie", CaptchaInfo::instance()->cookie()); QTcpSocket fd; fd.connectToHost(host, 80); fd.write(header.toString().toAscii()); QByteArray result; socketReceive(&fd, result); fd.close(); int sig_s_idx = result.indexOf("value")+8; int sig_e_idx = result.indexOf('"', sig_s_idx); QString sig = result.mid(sig_s_idx, sig_e_idx - sig_s_idx); group_sigs_.insert(gid+to_id, sig); return sig; }
void RefuseFileJob::run() { QString send_url = "/channel/refuse_file2?to=%1&lcid=%2&clientid=5412354841&psessionid=%3&t=%4"; QString host = "d.web2.qq.com"; QHttpRequestHeader header; header.setRequest("GET", send_url.arg(to_id_).arg(session_id_).arg(CaptchaInfo::instance()->psessionid()).arg(QDateTime::currentMSecsSinceEpoch())); header.addValue("Host", host); header.addValue("Referer", "http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=2"); header.addValue("Cookie", CaptchaInfo::instance()->cookie()); http_.setHost(host); http_.request(header); }
void SendMsgJob::sendMsg() { QString send_url = getPath(); QByteArray data = getData(); QHttpRequestHeader header; header.setRequest("POST", send_url); header.addValue("Host", "d.web2.qq.com"); header.addValue("Cookie", CaptchaInfo::instance()->cookie()); header.addValue("Referer", "http://d.web2.qq.com/proxy.html?v=20110331002"); header.addValue("Content-Length", QString::number(data.length())); header.addValue("Content-Type", "application/x-www-form-urlencoded"); http_.setHost("d.web2.qq.com"); http_.request(header, data); }
void SendImgJob::run() { QString send_url; QString host; if ( sendimg_type_ == kOffpic ) { send_url = "/ftn_access/upload_offline_pic?time=" + QString::number(QDateTime::currentMSecsSinceEpoch()); ; host = "weboffline.ftn.qq.com"; } else if ( sendimg_type_ == kGroupImg ) { send_url = "/cgi-bin/cface_upload?time=" + QString::number(QDateTime::currentMSecsSinceEpoch()); ; host = "up.web2.qq.com"; } QHttpRequestHeader header; header.setRequest("POST", send_url); header.addValue("Host", host); header.addValue("Content-Length", QString::number(data_.length())); header.addValue("Cache-Control", "max-age=0"); header.addValue("Origin", "http://web.qq.com"); header.addValue("Content-Type", "multipart/form-data; boundary="+Protocol::QQProtocol::instance()->imgSender()->boundary()); header.addValue("Referer", "http://web.qq.com/"); header.addValue("Cookie", CaptchaInfo::instance()->cookie()); http_.setHost(host); http_.request(header, data_); }
QByteArray TTSGoogle::CreateNewSound(QString text, QString voice, bool forceOverwrite) { QEventLoop loop; if(!voiceList.contains(voice)) voice = "fr"; // Check (and create if needed) output folder QDir outputFolder = ttsFolder; if(!outputFolder.exists(voice)) outputFolder.mkdir(voice); if(!outputFolder.cd(voice)) { LogError(QString("Cant create TTS Folder : %1").arg(ttsFolder.absoluteFilePath(voice))); return QByteArray(); } // Compute fileName QString fileName = QCryptographicHash::hash(text.toAscii(), QCryptographicHash::Md5).toHex().append(".mp3"); QString filePath = outputFolder.absoluteFilePath(fileName); if(!forceOverwrite && QFile::exists(filePath)) return ttsHTTPUrl.arg(voice, fileName).toAscii(); // Fetch MP3 QHttp http("translate.google.com"); QObject::connect(&http, SIGNAL(done(bool)), &loop, SLOT(quit())); QByteArray ContentData; ContentData += "q=" + QUrl::toPercentEncoding(text) + "&tl=" + voice; QHttpRequestHeader Header; Header.addValue("Host", "translate.google.com"); Header.setContentLength(ContentData.length()); Header.setRequest("POST", "/translate_tts", 1, 1); http.request(Header, ContentData); loop.exec(); QFile file(filePath); if (!file.open(QIODevice::WriteOnly)) { LogError("Cannot open sound file for writing"); return QByteArray(); } file.write(http.readAll()); file.close(); return ttsHTTPUrl.arg(voice, fileName).toAscii(); }
QByteArray TTSAcapela::CreateNewSound(QString text, QString voice, bool forceOverwrite) { QEventLoop loop; if(!voiceList.contains(voice)) voice = "claire"; // Check (and create if needed) output folder QDir outputFolder = ttsFolder; if(!outputFolder.exists(voice)) outputFolder.mkdir(voice); if(!outputFolder.cd(voice)) { LogError(QString("Cant create TTS Folder : %1").arg(ttsFolder.absoluteFilePath(voice))); return QByteArray(); } // Compute fileName QString fileName = QCryptographicHash::hash(text.toAscii(), QCryptographicHash::Md5).toHex().append(".mp3"); QString filePath = outputFolder.absoluteFilePath(fileName); if(!forceOverwrite && QFile::exists(filePath)) return ttsHTTPUrl.arg(voice, fileName).toAscii(); // Fetch MP3 QHttp http("vaas3.acapela-group.com"); QObject::connect(&http, SIGNAL(done(bool)), &loop, SLOT(quit())); QByteArray ContentData; ContentData += "client%5Ftext=" + QUrl::toPercentEncoding(text) + "&client%5Fvoice=" + voice + "22k&client%5Frequest%5Ftype=CREATE%5FREQUEST&client%5Fpassword=demo_web&client%5Flogin=asTTS&client%5Fversion=1%2D00&actionscript%5Fversion=3"; QHttpRequestHeader Header; Header.addValue("Host", "vaas3.acapela-group.com"); Header.addValue("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.1) Gecko/2008072820 Firefox/3.0.1"); Header.addValue("Referer", "http://www.acapela-group.com/Flash/Demo_Web_AS3/demo_web.swf?path=http://vaas3.acapela-group.com/connector/1-20/&lang=FR"); Header.addValue("Content-type", "application/x-www-form-urlencoded"); Header.addValue("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); Header.addValue("Accept-Language", "fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3"); Header.addValue("Accept-Encoding", "gzip,deflate"); Header.addValue("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); Header.addValue("Keep-Alive", "300"); Header.addValue("Connection", "keep-alive"); Header.setContentLength(ContentData.length()); Header.setRequest("POST", "/connector/1-20/textToMP3.php", 1, 1); http.request(Header, ContentData); loop.exec(); QByteArray reponse = http.readAll(); QUrl url("?"+reponse); if(url.hasQueryItem("retour_php")) { //LogDebug(QString("Acapela answer : %1").arg(QString(reponse))); QString acapelaFile = url.queryItemValue("retour_php"); //LogInfo(QString("Downloading MP3 file : %1").arg(QString(acapelaFile))); http.get(acapelaFile); loop.exec(); QFile file(filePath); if (!file.open(QIODevice::WriteOnly)) { LogError("Cannot open sound file for writing"); return QByteArray(); } file.write(http.readAll()); file.close(); return ttsHTTPUrl.arg(voice, fileName).toAscii(); } LogError("Acapela demo did not return a sound file"); LogDebug(QString("Acapela answer : %1").arg(QString(reponse))); return QByteArray(); }