R İpuçları 3: R ile Tweet Atmak

Berk Orbay
berk-orbay
Published in
5 min readFeb 13, 2014

Bu güzide yazıda size R kullanarak Twitter’ın faydalarından nasıl yararlanabileceğinize dair bir giriş yapacağım. En son R ile ilgili ipucu yazalı neredeyse bir sene olmuş. Ama olsun dönüşüm muhteşem oldu. İlk önce önemli olan niyet. Ben manyak değilim bu işle boşu boşuna uğraşayım, çok şükür elim ayağım da tutuyor kendim de tweet atabiliyorum, peki neden kendimi bu kadar sıkıntıya sokuyorum da R üzerinden tweet atmaya kasıyorum?

Cevabı basit. Yazdığım kodların çalışması bazen çok uzun sürüyor. Birkaç saat, birkaç gün çalışması gereken kodlar oluyor. Haliyle arada merak ediyorum patladı mı, şu anda ne durumda vs. diye. Her zaman bilgisayarın yanında da olamıyorum, bazen Teamviewer gibi uzaktan erişimleri kullanmaya da üşeniyorum. Bu yüzden bana kodun durumunu haber verebilecek bir güzellik peşinde koşuyorum. Aklıma twitter geldi.

Bu yazı kodlarının çalışmasını Twitter vasıtasıyla takip etmek isteyenler için yazılmıştır. Kodun eli dili olsa da bana tweet atsa diyenler buraya!

Twitter basit uyarıları kendime iletmem için enfes bir yol. Normal tweetlerle kısa ara durum raporları geçerken önemli uyarılarda mention ve direct message özelliklerini düşünüyorum. Böylece telefondan push notification tadında kodun durumundan haberdar olabileceğim. Emailden daha başarılı olacağına inanıyorum, gereksiz email kalabalığını sevmiyorum. Bir şeyi kontrol etmem gerekirse zaten bütün çıktılar ve kodlar GitHub’da ve Dropbox’ta olacak. Basitçe aklınıza tweet veya sms atan fırını getirin.

Twitter’ın R ile ilgili kullanımı genelde veri madenciliği (data mining) ile alakalı. Yani Twitter’dan veri çekeyim de analiz edeyim, mesela borsanın forex’in tozunu attırayım hevesiyle yapılıyor. Twitter ile ilgili R paketlerinin çoğu da bu maksatla oluşturulmuş. Benim, az önceki iki paragrafta da anlattığım gibi, şimdilik böyle büyük heveslerim yok. Ama böyle hevesleri olanlar için de bir başlangıç teşkil edebilir.

Baştan uyarayım. Ben bu işi becerebilmek için R’ın getirdiği kolaylıklara güvenmiştim ama beni haddinden fazla yordu. Bunun sebebi gerek Twitter’ın uygulama izin muhabbetlerini paso değiştirmesi, gerek Twitter ile ilgilenen R geliştiricilerinin işi pek sallamamaları (yarım yamalak dökümantasyon, güncellemeler arası uzun aralıklar). Zaten fark edeceğiniz üzere paketlerin çoğunu CRAN üzerinden değil GitHub üzerinden alacağız. Ayrıca şu anda ben epey hata da alıyorum ama son tahlilde yapmak istediklerim çalışıyor. O yüzden sorun bende değil geliştiricilerde şeklinde bir laf atma ihtiyacı hissediyorum.

Neyse hoşbeşi geçelim. İlk hareketiniz projeniz için bir Twitter hesabı açmak olmalı. Eğer kendi Twitter hesabınızı kullanmayı planlıyorsanız bir daha düşünün derim. Sizin kodunuzdaki güncellemelerden elaleme ne, hem ileride bu güncellemelerin listesini tek bir yerde görmek isteyeceksiniz. Bu yüzden projeye özel tweetleri korumalı bir Twitter hesabı açmak en iyisi.

Sonraki aşama kendinize Twitter’dan bir uygulama oluşturmanız. Şu linki ziyaret ediyoruz öncelikle: https://apps.twitter.com/ Sonra kullanıcı hesabımızla giriş yapıyoruz. İster kendi hesabınızı kullanın, ister proje için kullandığınız hesabı önemli değil. Eğer daha önce oluşturulmuş bir uygulamanız yoksa önünüze kabak gibi şu çıkıyor zaten.

Screen Shot 2014-02-13 at 15.15.31

Elimizi korkak alıştırmıyoruz ve basıyoruz. Gereken kısımları güzelce dolduruyoruz. Ne yazdığımız çok da fazla önemli değil, sonuçta kendimizin kullanacağı bir uygulamanın detayları bunlar. Koşulları kabul edip uygulamamızı oluşturuyoruz.

Şimdi ben bu kısmı anlayana kadar biraz illet oldum o yüzden Twitter uygulama geliştirme tecübeniz olmadığını varsayarak size olabildiğince basit anlatacağım. Uygulama sayfasına geldiğimizde ilk yapacağımız iş izinleri ayarlamak olmalı. Burada da elinizi korkak alıştırmayın ‘read, write, direct messages’ diye düzeltin ve onayladıktan sonra değişmiş mi diye seçiminizi bir kontrol edin.

API Keys sekmesine geldiğinizde aşağıdaki gibi bilgilerle karşılaşacaksınız.

Screen Shot 2014-02-13 at 15.28.44

API key kimi yerlerde ‘consumer key’ API secret da ‘consumer secret’ olarak karşımıza çıkar. Access level, uygulamanızın istediği izinleri özetler. Owner tanıdık gelir, owner id de eminim bir işe yarıyordur.

Şimdi eğer uygulamayı, projede kullanacağınız twitter hesabında oluşturduysanız işiniz bir miktar daha kolaylaşıyor. Aynı sayfanın altında ‘Your access token’ diye bir bölüm var. Oradan kendinize bir ‘token’ oluşturabiliyorsunuz.

Screen Shot 2014-02-13 at 15.35.33

Bu epey derdi çözer ama eğer istemiyorsanız onun da bir yolu var aşağıdaki kodlarda vereceğim. Şimdi geçelim R’ın başına. Birazdan kodlardan dikkat edeceksiniz, CRAN üzerinden ziyade GitHub üzerinden alacağız paketlerimizi. Dedim ya geliştiriciler biraz üşengeç. Unutmadan söyleyeyim ben bunları bir MacBook ile yazıyorum (Mavericks işletim sistemi 10.9.1), yani Windows için olay biraz farklı olabilir. Sanırım SSL ile ilgili bir şeyleri yüklemeniz gerekiyor ama emin değilim. R versiyonum da bugün için en son versiyon olan 3.0.2.

[sourcecode language=”r”]
#Devtools paketini yüklüyoruz ki
#Ben mirror olarak Berkeley’i seçtim ama sizin tercihiniz
install.packages(“devtools”, repos=”http://cran.cnr.Berkeley.edu")
library(devtools)
#GitHub üzerinden httr paketini yüklüyoruz
install_github(“httr”,username=”hadley”)
library(httr)
#Github üzerinden twitteR paketini yüklüyoruz
install_github(“twitteR”, username=”geoffjentry”)
library(twitteR)
#Bunları bir daha yüklemek gereksiz olabilir ama sistemin verdiği
#bazı hatalar yüzünden maksat içim rahat etsin diye yüklüyorum
library(ROAuth)
library(RCurl)
#SSL sertifikaları için gerekli.
options(RCurlOptions = list(cainfo = system.file(“CurlSSL”,
“cacert.pem”, package = “RCurl”)))
#JSON işleri için gerekli
install.packages(“RJSONIO”, repos=”http://cran.cnr.Berkeley.edu")
library(RJSONIO)
#Twitter için kullanacağımız URLler
reqURL <- “https://api.twitter.com/oauth/request_token"
accessURL <- “https://api.twitter.com/oauth/access_token"
authURL <- “https://api.twitter.com/oauth/authorize"
#API key aynı zamanda, kendinizinkini giriyorsunuz
consumerKey <- “uo*****************pQ”
#API secret aynı zamanda, kendinizinkini giriyorsunuz
consumerSecret <- “0g************************************QE”

[/sourcecode]

Hazırlık aşaması burada iyi hoş gidiyor. Şimdi eğer uygulamayı proje Twitter hesabında oluşturup kendisi için bir access token oluşturmadıysanız aşağıdaki kodları da ekliyorsunuz.

[sourcecode language=”r”]
twitCred$handshake(cainfo = system.file(“CurlSSL”,
“cacert.pem”, package = “RCurl”))
[/sourcecode]

Bu kod çifti konsolda size şöyle bir yazı getiriyor

[sourcecode language=”r”]
To enable the connection, please direct your web browser to:
https://api.twitter.com/oauth/authorize?oauth_token=
VPzbmicE**************************d5drX0
When complete, record the PIN given to you and provide it here:
[/sourcecode]

Gidip URLi proje twitter hesabınızın açık olduğu tarayıcıya (Chrome olur, Firefox olur, Safari olur, fark etmez kısaca) yapıştırıyorsunuz. Authorize App diyorsunuz ve size bir PIN kodu veriyor. O kodu alıp R’a yazıyoruz. Her şey güzel giderse bir uyarı almıyoruz. Sırada bu anlaşmamızı R’a anlatmak ve kaydetmek var. twitCred objesinde sizin izin için istediğiniz access key ve access secret bilgileri de var. Onları da kullanarak bağlantımızı oluşturuyoruz. Eğer akıllılık edip proje Twitter hesabıyla uygulamayı oluşturduysanız aşağıdaki kodda twitCred$oauthKey yerine size ait olan Access Token ve twitCred$oauthSecret yerine Access Token Secret değerlerini giriyoruz.

[sourcecode language=”r”]
setup_twitter_oauth(consumerKey,consumerSecret,twitCred$oauthKey,
twitCred$oauthSecret,
credentials_file=”buraya_bir_dosya_ismi_gelsin.rda”)
[/sourcecode]

Son parametre olan credentials_file bütün bunları tekrar yapmak istemiyorsanız bu bilgileri bir dosyaya kaydediyor. Daha sonra

[sourcecode language=”r”]
load_twitter_oauth(“buraya_bir_dosya_ismi_gelsin.rda”)
[/sourcecode]

koduyla herhangi bir zamanda geri çağırabiliyoruz. Yani yukarıdaki prosedürü sadece kurulumda yapıyoruz. En son da test yapıyoruz:

[sourcecode language=”r”]
tweet(“Ben de R ile Twitter baglantisini basardim! Tesekkurler
@berkorbay”)
[/sourcecode]

RJSONIO paketini yükledikten sonra aşağıdaki sorun da bitti. Gönül rahatlığıyla kullanabilirsiniz.

Şimdilik ben şöyle saçma sapan bir hata alıyorum ama tweet atıyor.

Error in tw_from_response(out, …) :
Error: Malformed response from server, was not JSON.
The most likely cause of this error is Twitter returning a character which
can’t be properly parsed by R. Generally the only remedy is to wait long
enough for the offending character to disappear from searches (e.g. if
using searchTwitter()).

Son olarak bu süreçte yararlandığım bazı kaynakları da aşağıda ekliyorum.

https://github.com/geoffjentry/twitteR
http://lists.hexdump.org/listinfo.cgi/twitter-users-hexdump.org
http://cran.r-project.org/web/packages/twitteR/index.html
https://github.com/hadley/httr
http://www.r-bloggers.com/getting-started-with-twitter-in-r/
http://nsfabina.wordpress.com/2011/04/05/twitterpated-tweeting-from-within-r/
http://www.r-bloggers.com/r-twitter-and-urls/
http://thinktostart.wordpress.com/2013/05/22/twitter-authentification-with-r/

Umarım pek sevgili araştırmacı arkadaşların kullanabileceği bir kaynak olmuştur. Bu kodu daha basitleştirebilirsem güncel halini buraya ayrıca koyacağım. Bir de şu geliştiricilere çemkireyim bakayım nedir benim bu hatalardan çektiğim.

--

--

Berk Orbay
berk-orbay

Current main interests are #OR and #RL. You may reach me at Linkedin.