Posting images on twitter with openframeworks

@pelayo @bakercp i’m testing your multipart branch but i have an issue:

…/libs/libcurl/include/curl/curlrules.h|143|error: size of array ‘curl_rule_01’ is negative|

i’m working with OF 008 and linux64.

i realized that ofxOAuth addon seems tested only on OSX, there aren’t lib for windows or linux so i’m going to build the static libs for liboauth and libcurl… i will fork also the repo so we can upload the changes.

Hey all, if you’ve tested and confirmed it works, I’m happy to pull it in. You should be able to use liboauth via apt-get and a good addons_config.mk file. keep me posted and I’ll help!

@bakercp right now i’m testing your linux64 branch, it compile fine, when i run it, the twitter page to authenticate will open but when i authorize it and suddenly when it redirect to http://127.0.0.1:8080/?oauth_token=… the app crash and no xml file is saved. Maybe i miss some settings, you mention to set as web based app but i can’t find where is this setting in my twitter web page app settings.

Hey there, I’m hoping to look at this soon – but I’m a bit backlogged at the moment … the linux64 branch may be a bit out of date … I can’t recall. More soon.

thanks you for the answer @bakercp, i would use it for my thesis project, but if it’s not possible, i continue to use twurl as discussed in the previous posts.

Sorry for the delay about this. I have just now updated my fork of ofxOauth and ofxTwitter.

@kalwalt If you can see the authorization window I think your app configuration is fine.

@bakercp I have updated my pull request in ofxOAuth to include also the multipart form data functions needed to send photos from ofxTwitter.

I can only test in OSX so it would be great to get support for linux.

Hey this is great – @pelayo would you be willing to either update the existing twitter example or add an example that demonstrates this post behavior? Then we’ll be able to test it quickly … sorry, I would do it, but I’m slammed with deadlines these days. As soon as we get it tested and working on OSX, I’ll pull it in and we can get it integrated.

Thanks for your great work on this @kalwalt and @pelayo!

CB

Hi @bakercp Thanks. I have a working example via the new version of ofxTwitter I´m creating that works with API 1.1 https://github.com/pelayomendez/ofxTwitter/tree/master/example-post

this is super fine @pelayo! i will try this with the modified linux64 version of ofOauth, will see what happens. @bakercp i have done nothing! instead thanks for your interest.

@pelayo @bakercp i’m testing it but i have an issue with ofxJSON it seems that there was already a JSON issue on linux

@pelayo @bakercp the json issue was solved but i have another with ofxTwitter with varables initialized in the declarations:

running command: make -f Makefile Release
Compiling OF library for Release
make[2]: Nessuna operazione da eseguire per “ReleaseABI”.
Done!
Compiling example_post for Release
Compiling src/main.cpp
g++ -c -Os -Wall -march=native -mtune=native -DOF_USING_GTK -DOF_USING_MPG123 -I/usr/include/jsoncpp -fpermissive -I./src -I…/…/…/addons/ofxXmlSettings/src -I…/…/…/addons/ofxXmlSettings/libs -I…/…/…/addons/ofxJSON/src -I…/…/…/addons/ofxJSON/libs -I…/…/…/addons/ofxOAuth/src -I…/…/…/addons/ofxOAuth/libs -I…/…/…/addons/ofxOAuth/libs/liboauth -I…/…/…/addons/ofxOAuth/libs/liboauth/lib -I…/…/…/addons/ofxOAuth/libs/liboauth/lib/linux64 -I…/…/…/addons/ofxOAuth/libs/liboauth/lib/osx -I…/…/…/addons/ofxOAuth/libs/liboauth/include -I…/…/…/addons/ofxOAuth/libs/liboauth/include -I…/…/…/addons/ofxTwitter/src -pthread -D_REENTRANT -I/usr/local/include -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/gstreamer-0.10 -I/usr/include/libxml2 -I/usr/include/alsa -I/usr/include/libdrm -I/usr/include/GL -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I…/…/…/libs/fmodex/include -I…/…/…/libs/glfw/include -I…/…/…/libs/glfw/include/GLFW -I…/…/…/libs/kiss/include -I…/…/…/libs/openssl/include -I…/…/…/libs/openssl/include/openssl -I…/…/…/libs/poco/include -I…/…/…/libs/portaudio/include -I…/…/…/libs/rtAudio/include -I…/…/…/libs/tess2/include -I…/…/…/libs/openFrameworks -I…/…/…/libs/openFrameworks/app -I…/…/…/libs/openFrameworks/graphics -I…/…/…/libs/openFrameworks/3d -I…/…/…/libs/openFrameworks/sound -I…/…/…/libs/openFrameworks/math -I…/…/…/libs/openFrameworks/types -I…/…/…/libs/openFrameworks/communication -I…/…/…/libs/openFrameworks/utils -I…/…/…/libs/openFrameworks/gl -I…/…/…/libs/openFrameworks/video -I…/…/…/libs/openFrameworks/events -MMD -MP -MF obj/linux64/Release/src/main.d -MT obj/linux64/Release/src/main.o -o obj/linux64/Release/src/main.o -c src/main.cpp
In file included from …/…/…/addons/ofxOAuth/src/ofxOAuth.h:36:0,
from …/…/…/addons/ofxTwitter/src/ofxTwitter.h:29,
from src/testApp.h:4,
from src/main.cpp:2:
…/…/…/addons/ofxOAuth/src/ofxOAuthVerifierCallbackServer.h: In member function ‘bool ofxOAuthAuthReqHandler::parseQuery(const string&, Poco::Net::NameValueCollection&)’:
…/…/…/addons/ofxOAuth/src/ofxOAuthVerifierCallbackServer.h:259:44: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
In file included from …/…/…/addons/ofxTwitter/src/ofxTwitter.h:32:0,
from src/testApp.h:4,
from src/main.cpp:2:
…/…/…/addons/ofxTwitter/src/ofxTwitterTweet.h: At global scope:
…/…/…/addons/ofxTwitter/src/ofxTwitterTweet.h:37:37: warning: ISO C++ forbids initialization of member ‘profile_image_url_loaded’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterTweet.h:37:37: warning: making ‘profile_image_url_loaded’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterTweet.h:37:37: error: ISO C++ forbids in-class initialization of non-const static member ‘profile_image_url_loaded’
…/…/…/addons/ofxTwitter/src/ofxTwitterTweet.h:41:38: warning: ISO C++ forbids initialization of member ‘profile_banner_url_loaded’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterTweet.h:41:38: warning: making ‘profile_banner_url_loaded’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterTweet.h:41:38: error: ISO C++ forbids in-class initialization of non-const static member ‘profile_banner_url_loaded’
In file included from …/…/…/addons/ofxTwitter/src/ofxTwitter.h:33:0,
from src/testApp.h:4,
from src/main.cpp:2:
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:17:34: error: a call to a constructor cannot appear in a constant-expression
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:17:34: warning: ISO C++ forbids initialization of member ‘geocode’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:17:34: warning: making ‘geocode’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:17:34: error: invalid in-class initialization of static data member of non-integral type ‘ofPoint {aka ofVec3f}’
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:19:22: warning: ISO C++ forbids initialization of member ‘bUseMiles’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:19:22: warning: making ‘bUseMiles’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:19:22: error: ISO C++ forbids in-class initialization of non-const static member ‘bUseMiles’
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:20:26: warning: ISO C++ forbids initialization of member ‘geocode_radius’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:20:26: warning: making ‘geocode_radius’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:20:26: error: ISO C++ forbids in-class initialization of non-const static member ‘geocode_radius’
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:27:17: warning: ISO C++ forbids initialization of member ‘count’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:27:17: warning: making ‘count’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:27:17: error: ISO C++ forbids in-class initialization of non-const static member ‘count’
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:31:21: warning: ISO C++ forbids initialization of member ‘since_id’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:31:21: warning: making ‘since_id’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:31:21: error: ISO C++ forbids in-class initialization of non-const static member ‘since_id’
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:32:19: warning: ISO C++ forbids initialization of member ‘max_id’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:32:19: warning: making ‘max_id’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:32:19: error: ISO C++ forbids in-class initialization of non-const static member ‘max_id’
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:33:29: warning: ISO C++ forbids initialization of member ‘include_entities’ [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:33:29: warning: making ‘include_entities’ static [-fpermissive]
…/…/…/addons/ofxTwitter/src/ofxTwitterSearch.h:33:29: error: ISO C++ forbids in-class initialization of non-const static member ‘include_entities’
make[1]: *** [obj/linux64/Release/src/main.o] Errore 1
make: *** [Release] Errore 2
Process terminated with status 2 (0 minutes, 2 seconds)
10 errors, 19 warnings

this issue can be solved with some cflags or the code need to be changed?

i have a rearranged the code to solve the issue above but i get again the curl issue

…/…/ofxOAuth/libs/libcurl/include/curl/curlrules.h|143|error: size of array ‘curl_rule_01’ is negative|

even if i have your @bakercp version of addon_config.mk in ofxOAuth addon folder with the ADDON_LDFLAGS = -lcurl

If you are using the system curl, then you need to use the system headers – in that case, you may need to exclude those headers on linux and include curl as a pkg-config pakage to get all the right settings.

i added this in config.make:

PROJECT_CFLAGS = $(shell pkg-config jsoncpp curl --cflags)
PROJECT_LDFLAGS=-Wl,-rpath=./libs $(shell pkg-config jsoncpp curl --libs)

i installed libcurl4-gnutls-dev with
sudo apt-get install libcurl4-gnutls-dev
package libcurl.pc in /usr/lib/x86_64-linux-gnu/pkgconfig/libcurl.pc

i get errors like this:

Compiling example_post for Release
Package curl was not found in the pkg-config search path.
Perhaps you should add the directory containing curl.pc' to the PKG_CONFIG_PATH environment variable No package 'curl' found Package curl was not found in the pkg-config search path. Perhaps you should add the directory containingcurl.pc’
to the PKG_CONFIG_PATH environment variable
No package ‘curl’ found
Compiling …/…/…/addons/ofxOAuth/src/ofxOAuth.cpp
g++ -c -Os -Wall -march=native -mtune=native -DOF_USING_GTK -DOF_USING_MPG123 -I./src -I…/…/…/addons/ofxXmlSettings/src -I…/…/…/addons/ofxXmlSettings/libs -I…/…/…/addons/ofxJSON/src -I…/…/…/addons/ofxJSON/libs -I…/…/…/addons/ofxOAuth/src -I…/…/…/addons/ofxOAuth/libs -I…/…/…/addons/ofxOAuth/libs/libcurl -I…/…/…/addons/ofxOAuth/libs/libcurl/lib -I…/…/…/addons/ofxOAuth/libs/libcurl/lib/osx -I…/…/…/addons/ofxOAuth/libs/libcurl/include -I…/…/…/addons/ofxOAuth/libs/libcurl/include/curl -I…/…/…/addons/ofxOAuth/libs/liboauth -I…/…/…/addons/ofxOAuth/libs/liboauth/lib -I…/…/…/addons/ofxOAuth/libs/liboauth/lib/linux64 -I…/…/…/addons/ofxOAuth/libs/liboauth/lib/osx -I…/…/…/addons/ofxOAuth/libs/liboauth/include -I…/…/…/addons/ofxOAuth/libs/libcurl/include -I…/…/…/addons/ofxOAuth/libs/libcurl/include/curl -I…/…/…/addons/ofxOAuth/libs/liboauth/include -I…/…/…/addons/ofxTwitter/src -pthread -D_REENTRANT -I/usr/local/include -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/gstreamer-0.10 -I/usr/include/libxml2 -I/usr/include/alsa -I/usr/include/libdrm -I/usr/include/GL -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I…/…/…/libs/fmodex/include -I…/…/…/libs/glfw/include -I…/…/…/libs/glfw/include/GLFW -I…/…/…/libs/kiss/include -I…/…/…/libs/openssl/include -I…/…/…/libs/openssl/include/openssl -I…/…/…/libs/poco/include -I…/…/…/libs/portaudio/include -I…/…/…/libs/rtAudio/include -I…/…/…/libs/tess2/include -I…/…/…/libs/openFrameworks -I…/…/…/libs/openFrameworks/app -I…/…/…/libs/openFrameworks/graphics -I…/…/…/libs/openFrameworks/3d -I…/…/…/libs/openFrameworks/sound -I…/…/…/libs/openFrameworks/math -I…/…/…/libs/openFrameworks/types -I…/…/…/libs/openFrameworks/communication -I…/…/…/libs/openFrameworks/utils -I…/…/…/libs/openFrameworks/gl -I…/…/…/libs/openFrameworks/video -I…/…/…/libs/openFrameworks/events -MMD -MP -MF …/…/…/addons/obj/linux64/Release/ofxOAuth/src/ofxOAuth.d -MT …/…/…/addons/obj/linux64/Release/ofxOAuth/src/ofxOAuth.o -o …/…/…/addons/obj/linux64/Release/ofxOAuth/src/ofxOAuth.o -c …/…/…/addons/ofxOAuth/src/ofxOAuth.cpp
In file included from …/…/…/addons/ofxOAuth/src/ofxOAuth.h:36:0,
from …/…/…/addons/ofxOAuth/src/ofxOAuth.cpp:26:
…/…/…/addons/ofxOAuth/src/ofxOAuthVerifierCallbackServer.h: In member function ‘bool ofxOAuthAuthReqHandler::parseQuery(const string&, Poco::Net::NameValueCollection&)’:
…/…/…/addons/ofxOAuth/src/ofxOAuthVerifierCallbackServer.h:259:44: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
In file included from …/…/…/addons/ofxOAuth/libs/libcurl/include/curl/curl.h:35:0,
from …/…/…/addons/ofxOAuth/src/ofxOAuth.cpp:37:
…/…/…/addons/ofxOAuth/libs/libcurl/include/curl/curlrules.h: At global scope:
…/…/…/addons/ofxOAuth/libs/libcurl/include/curl/curlrules.h:143:41: error: size of array ‘curl_rule_01’ is negative
…/…/…/addons/ofxOAuth/src/ofxOAuth.cpp: In member function ‘std::map<std::basic_string, std::basic_string > ofxOAuth::obtainRequestToken()’:
…/…/…/addons/ofxOAuth/src/ofxOAuth.cpp:1277:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
…/…/…/addons/ofxOAuth/src/ofxOAuth.cpp: In member function ‘std::map<std::basic_string, std::basic_string > ofxOAuth::obtainAccessToken()’:
…/…/…/addons/ofxOAuth/src/ofxOAuth.cpp:1482:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
make[1]: *** […/…/…/addons/obj/linux64/Release/ofxOAuth/src/ofxOAuth.o] Errore 1
make: *** [Release] Errore 2
Process terminated with status 2 (0 minutes, 1 seconds)
1 errors, 3 warnings

Hi @bakercp I have updated ofxOauth twitter example to help you testing the new functions.

@kalwalt can you please send me the changes you’ve made in ofxTwitter to make it work on Linux? I´ll try to avoid those mistakes from now on.

@pelayo i did only this:

//
//  ofxTwitterSearch.h
//  twitterapp
//
//  Created by Pelayo on 13/12/13.
//
//

#pragma once

#include "ofMain.h"

struct ofxTwitterSearch {

    string query;
    // required
    //ofPoint geocode = ofPoint(0,0);
    ofPoint geocode;
    // x. latitude / y. longitude
    //bool bUseMiles = false;
    bool bUseMiles ;
    //int geocode_radius = 1;
    int geocode_radius ;
    string lang;
    // ISO 639-1 http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
    string locale;
    // only 'ja' is efective here
    string result_type;
    // valid values: mixed, recent, popular
    //int count = 15;
    int count ;
    // default 15 . maximun 100
    string until;
    // YYYY-MM-DD ej:2012-09-01
    //nt since_id = -1;
    //int max_id = -1;
    //bool include_entities = true;
    int since_id ;
    int max_id ;
    bool include_entities ;
    //string callback;

};

and this:

/*
 *  ofxTwitterTweet.h
 *
 *  Created by Douglas Edric Stanley on 10/12/10
 *  cc-by-sa 2010 www.abstractmachine.net. Some rights reserved.
 *  http://creativecommons.org/licenses/by-sa/3.0/
 *
 *  Adapted from code by Paul Shen
 *  cf. http://in.somniac.me/2010/01/openframeworks-http-requests-xml-parser/
 *
 *  10/12/2013 Adapted to Twitter API 1.1 by Pelayo MŽndez
 *
 */

#pragma once

#include "ofMain.h"

struct ofxTwitterTweetAuthor {

    string id_str;
    string uri;

    string name;
	string screen_name;
    string description;
    string location;
    string lang;
    string url;

    bool default_profile;
    bool default_profile_image;
    bool geo_enabled;

	string profile_image_url;
    ofImage profile_image;
    //bool profile_image_url_loaded = false;
    bool profile_image_url_loaded ;
    string profile_banner_url;
    ofImage profile_banner;
    //bool profile_banner_url_loaded = false;
    bool profile_banner_url_loaded ;
    string profile_background_image_url;
    string profile_background_color;
    bool profile_background_tile;
    bool profile_use_background_image;


};

struct ofxTwitterTweet {

	string id_str;
    string created_at;
	string language;
    string text;
    string geo;
    ofPoint coordinates;
    string source;
    int retweet_count;

    bool truncated;

	ofxTwitterTweetAuthor user;

    ofxTwitterTweet() { }
	ofxTwitterTweet(string defaultString)	: text(defaultString) { }

	void print() {

		string str;

        str +=  "\n";
        str +=  "\n--- Tweet ---";
		str += "\nid_str: " + id_str;
		str +=  "\ncreated_at: " + created_at;
        str +=  "\nlanguage: " + language;
		str +=  "\ntext: " + text;
        str +=  "\ngeo: " + geo;
        str +=  "\ncoordinates: " + ofToString(coordinates.x) + "/" + ofToString(coordinates.y);
        str +=  "\nsource: " + source;
        str +=  "\nretweet_count: " + ofToString(retweet_count);
        str +=  "\n--- User ---";
		str +=  "\nuser:name: " + user.name;
        str +=  "\nuser:screen_name: "+ user.screen_name;
		str +=  "\nuser:uri: " + user.uri;
		str +=  "\nuser:imageUri: " + user.profile_image_url;
        str +=  "\nuser:description: " + user.description;
        str +=  "\nuser:location: " + user.location;
        str +=  "\nuser:lang: " + user.lang;
        str +=  "\nuser:url:" + user.url;

		cout << str;

	}

//user.profile_image_url_loaded = false;
//user.profile_banner_url_loaded = false;

    bool isProfileImageLoaded() {
        if (user.profile_image.isAllocated() && user.profile_image_url_loaded) {
            return true;
        } else {
            return false;
        }
    }

    bool isBannerImageLoaded() {
        if (user.profile_banner.isAllocated() && user.profile_banner_url_loaded) {
            return true;
        } else {
            return false;
        }
    }

};

but i think that is not a good solution, possible other bugs will come with it. I don’t feel very comfortable with the structs. i don’t found any other quick solutions.

I did one step more; this flags works with json and curl packages installed ( you need to delete json headers in the ofxJSON addon or exclude it from source):

PROJECT_LDFLAGS=-Wl,-rpath=./libs  $(shell pkg-config curl  --libs)
PROJECT_LDFLAGS=+-Wl,-rpath=./libs  $(shell pkg-config jsoncpp  --libs)

and

PROJECT_CFLAGS = $(shell pkg-config curl  --cflags)
PROJECT_CFLAGS +=$(shell pkg-config  jsoncpp  --cflags)

but now i receive error in ofxTwitter.cpp updatueStatus(string,string) to this line:

   ../src/ofxTwitter.cpp|136|error: no matching function for call to ‘ofxOAuth::postfile_multipartdata(std::string&, std::basic_string<char>, const char [8], std::string&)’|
../../../addons/ofxTwitter/src/ofxTwitter.cpp:136:95: note: candidate is:
../../../addons/ofxOAuth/src/ofxOAuth.h:81:17: note: std::string ofxOAuth::postfile_multipartdata(const string&, const string&, const string&)
../../../addons/ofxOAuth/src/ofxOAuth.h:81:17: note:   candidate expects 3 arguments, 4 provided

i think i’m not testing the right branch, @pelayo please could you tell me what branches are you using (ofoAUth, ofsJson, ofxTwitter)?

Thanks @kalwalt I will change the way I assign default value to the variables in my code to avoid that issue.

I´m using the ‘master’ branch of my fork of ofxOauth at the moment to post to Twitter.

Solved! it works! a big WooooW! i have a tweet on my page with the buses.jpg!
But i needed to fix just some little things in ofxTwitter.cpp, due to some “ambiguituies” in the code:

// if(trends[i]["geo"] != NULL) {
            if(trends[i]["geo"] != Json::Value::null) {

and

 //if(author["profile_image_url"] != NULL && bLoadUserProfileImageOnMemory) {
            if(author["profile_image_url"] != Json::Value::null && bLoadUserProfileImageOnMemory) {

and

 //if(author["profile_banner_url"] != NULL && bLoadUserBannerImageOnMemory) {
            if(author["profile_banner_url"] != Json::Value::null && bLoadUserBannerImageOnMemory) {

the code commented was your version.

and also i do an error before with LD_FLAGS, this is right:

PROJECT_LDFLAGS=-Wl,-rpath=./libs  $(shell pkg-config curl  --libs)
PROJECT_LDFLAGS+= -Wl,-rpath=./libs  $(shell pkg-config jsoncpp  --libs)

i used your master branch of ofxoAUTH and ofxTwitter