File indexing completed on 2024-05-12 04:57:43
0001 /* 0002 This file is part of Choqok, the KDE micro-blogging client 0003 0004 SPDX-FileCopyrightText: 2010-2012 Andrey Esin <gmlastik@gmail.com> 0005 0006 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0007 */ 0008 0009 #include "bit_ly.h" 0010 0011 #include <KIO/StoredTransferJob> 0012 #include <KLocalizedString> 0013 #include <KPluginFactory> 0014 0015 #include "notifymanager.h" 0016 #include "passwordmanager.h" 0017 0018 #include "bit_ly_settings.h" 0019 0020 K_PLUGIN_CLASS_WITH_JSON(Bit_ly, "choqok_bit_ly.json") 0021 0022 Bit_ly::Bit_ly(QObject *parent, const QVariantList &) 0023 : Choqok::Shortener(QLatin1String("choqok_bit_ly"), parent) 0024 { 0025 } 0026 0027 Bit_ly::~Bit_ly() 0028 { 0029 } 0030 0031 QString Bit_ly::shorten(const QString &url) 0032 { 0033 QString login = QCoreApplication::applicationName(); 0034 QString apiKey = QLatin1String("R_bdd1ae8b6191dd36e13fc77ca1d4f27f"); 0035 QUrl reqUrl(QLatin1String("http://api.bit.ly/v3/shorten")); 0036 QUrlQuery reqQuery; 0037 Bit_ly_Settings::self()->load(); 0038 QString userApiKey = Choqok::PasswordManager::self()->readPassword(QStringLiteral("bitly_%1") 0039 .arg(Bit_ly_Settings::login())); 0040 if (!Bit_ly_Settings::login().isEmpty() && !userApiKey.isEmpty()) { 0041 reqQuery.addQueryItem(QLatin1String("x_login"), Bit_ly_Settings::login()); 0042 reqQuery.addQueryItem(QLatin1String("x_apiKey"), userApiKey); 0043 } 0044 0045 if (Bit_ly_Settings::domain() == QLatin1String("j.mp")) { //bit.ly is default domain 0046 reqQuery.addQueryItem(QLatin1String("domain"), QLatin1String("j.mp")); 0047 } 0048 0049 reqQuery.addQueryItem(QLatin1String("login"), QLatin1String(login.toUtf8())); 0050 reqQuery.addQueryItem(QLatin1String("apiKey"), QLatin1String(apiKey.toUtf8())); 0051 reqQuery.addQueryItem(QLatin1String("longUrl"), QUrl(url).url()); 0052 reqQuery.addQueryItem(QLatin1String("format"), QLatin1String("txt")); 0053 reqUrl.setQuery(reqQuery); 0054 0055 KIO::StoredTransferJob *job = KIO::storedGet(reqUrl, KIO::Reload, KIO::HideProgressInfo); 0056 job->exec(); 0057 0058 if (!job->error()) { 0059 const QByteArray data = job->data(); 0060 QString output = QLatin1String(data); 0061 QRegExp rx(QLatin1String("(http://((.*)+)/([a-zA-Z0-9])+)")); 0062 rx.indexIn(output); 0063 QString bitlyUrl = rx.cap(0); 0064 if (!bitlyUrl.isEmpty()) { 0065 return bitlyUrl; 0066 } 0067 0068 QString err = QLatin1String(data); 0069 if (output.startsWith(QLatin1String("INVALID_X_APIKEY"))) { 0070 err = i18n("API key is invalid"); 0071 } 0072 if (output.startsWith(QLatin1String("INVALID_X_LOGIN"))) { 0073 err = i18n("Login is invalid"); 0074 } 0075 if (output.startsWith(QLatin1String("RATE_LIMIT_EXCEEDED"))) { 0076 err = i18n("Rate limit exceeded. Try another shortener."); 0077 } 0078 0079 Choqok::NotifyManager::error(i18n("Malformed response"), i18n("Bit.ly error")); 0080 } else { 0081 Choqok::NotifyManager::error(i18n("Cannot create a short URL.\n%1", job->errorString()), 0082 i18n("Bit.ly error")); 0083 } 0084 return url; 0085 } 0086 0087 #include "bit_ly.moc" 0088 #include "moc_bit_ly.cpp"