added first bit.ly shortener plugin implementation. needs to be advanced by questioni...
[choqok:timthomas-choqok.git] / plugins / shorteners / bit_ly / bit_ly.cpp
1 /*
2 This file is part of Choqok, the KDE micro-blogging client
3
4 Copyright (C) 2008-2009 Mehrdad Momeny <mehrdad.momeny@gmail.com>
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License as
8 published by the Free Software Foundation; either version 2 of
9 the License or (at your option) version 3 or any later version
10 accepted by the membership of KDE e.V. (or its successor approved
11 by the membership of KDE e.V.), which shall act as a proxy
12 defined in Section 14 of version 3 of the license.
13
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, see http://www.gnu.org/licenses/
22 */
23
24 #include "bit_ly.h"
25 #include <QString>
26 #include <KIO/Job>
27 #include <KDebug>
28 #include <kio/netaccess.h>
29 #include <KAboutData>
30 #include <KGenericFactory>
31 #include <kglobal.h>
32
33 K_PLUGIN_FACTORY ( MyPluginFactory, registerPlugin < BitLy > (); )
34 K_EXPORT_PLUGIN ( MyPluginFactory ( "choqok_piraten_in" ) )
35
36 BitLy::BitLy ( QObject* parent, const QVariantList& )
37 : Choqok::Shortener ( MyPluginFactory::componentData(), parent )
38 {
39 }
40
41 BitLy::~BitLy()
42 {
43
44 }
45
46 QString BitLy::shorten(const QString& url)
47 {
48   kDebug() << "Using tinyarro_ws";
49   QByteArray data;
50   KUrl reqUrl ( "http://api.bit.ly/shorten?version=2.0.1&format=json" );
51   reqUrl.addQueryItem( "login", QString( "eicht" ) );
52   reqUrl.addQueryItem( "apiKey", QString( "R_882a0e2482bde7025275d2d91cfa42d0" ) );
53   reqUrl.addQueryItem( "longUrl", KUrl(url).url() );
54
55   KIO::Job* job = KIO::get ( reqUrl, KIO::Reload, KIO::HideProgressInfo );
56   job->addMetaData("content-type","Content-Type: application/x-www-form-urlencoded");
57
58   if ( KIO::NetAccess::synchronousRun ( job, 0, &data ) )
59   {
60     // data is a utf string of short url, no parsing needed
61
62     //_____dirty :(______
63     QString tmp( data );
64     tmp = tmp.simplified().remove( '"' );
65
66     QStringList list = tmp.split( ' ' );
67     QStringList::iterator iter = list.end();
68     QStringList::const_iterator begin = list.constBegin();
69
70     iter--;
71     kDebug() << *iter;
72     while ( iter->operator!=( "userHash:" ) )
73     {
74       iter--;
75       kDebug() << *iter;
76     }
77
78     QString output( *(--iter) );
79     //___________________
80
81     kDebug() << "Short url unicode is: " << output;
82
83     if ( !output.isEmpty() )
84     {
85       return output;
86     }
87   }
88   else
89   {
90     kDebug() << "Cannot create a shortened url.\t" << job->errorString();
91   }
92   return url;
93 }
94