Tugas II II5166 (Keamanan Informasi Lanjut) Membuat aplikasi TWITTER yang mengambil data dari API-nya TWITTER
Semester 1 - 2012/2013
Dosen: Dr. Ir. Budi Rahardjo Dikerjakan Oleh: 23512036 - Wahyu Widodo 23512076 - Perdana Kusumah 23512098 - Aries Syamsuddin
LAYANAN TEKNOLOGI INFORMASI SEKOLAH TEKNIK ELEKTRO DAN INFORMATIKA INSTITUT TEKNOLOGI BANDUNG 2012
Tata Cara Pembuatan Aplikasi Aplikasi yang dibuat menggunakan tool pengembangan Microsoft Visual Studio .NET, dengan bahasa pemrograman C#. Aplikasi tersebut merupakan aplikasi desktop-based. Urutan cara kerja pengerjaannya: 1. Baca API yang disediakan oleh twitter, dengan parameter masukan berupa userID yang akan diambil datanya. 2. Ambil datanya dalam bentuk XML. 3. Baca tag XML yang diambil, kemudian masukkan ke dalam object penampung. 4. Object penampung tersebut akan terisi dengan nodes XML (berbentuk tree). 5. Ekstrak nodes yang diperlukan. 6. Isi ke dalam suatu penampung yang bertindak sebagai viewer (dapat berupa listbox, combobox, datagrid, dan lain-lain). Pada pembuatan aplikasi ini, hanya memastikan bahwa fungsi pengambilan data dari twitter berhasil dilakukan, belum meng-cover masalah error-handling.
Tampilan / Screenshot 1. Tampilan awal, berisi 1 field untuk input data dari user dan 3 fields untuk penampung output dari hasil searching userID ke dalam twitter.com.
Gambar 1. Awal
2. Entri parameter masukan userID, pengguna aplikasi hanya perlu memasukkan data userID atau screen name dari seseorang yang memiliki account twitter.
Gambar 2. Input user
3. Output aplikasi, hasil searching akan menghasilkan data profile dari seseorang yang memiliki account twitter, daftar friends-nya, dan daftar follower-nya. Untuk data friends dan followers hanya dimunculkan data 100 besarnya saja.
Gambar 3. Output
LAMPIRAN – Source-code Aplikasi //given-library using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; //tambahan library using System.Xml; using System.Net; using System.IO; using System.Data; namespace TugasTwitter { /// <summary> /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } /// <summary> /// fungsi mengambil data XML dari API-nya TWITTER /// /// <param name="uri"> ///
public static XmlDocument GetResponse(string uri) { //kamus data WebRequest req; XmlDocument doc; //algoritma req = WebRequest.Create(new Uri(uri)); doc = new XmlDocument(); doc.Load(req.GetResponse().GetResponseStream()); return doc; } /// <summary> /// fungsi mengambil data XML dari API-nya TWITTER, menggunakan username dan password /// /// <param name="uri"> /// <param name="username"> /// <param name="password"> /// <param name="post"> ///
public static XmlDocument GetResponse(string uri, string username, string password, bool post) { //kamus data WebRequest req; XmlDocument doc; //algoritma req = WebRequest.Create(new Uri(uri)); if (post) req.Method = "POST";
if ((username != null) && (username.Trim() != String.Empty) && (!String.IsNullOrEmpty(password))) req.Credentials = new NetworkCredential(username.Trim(), password); doc = new XmlDocument(); doc.Load(req.GetResponse().GetResponseStream()); //return value return doc; } /// <summary> /// Fungsi tambahan apabila ingin memasukkan data XML ke dalam String /// /// <param name="xml"> ///
public static string ConvertXml2String(XmlDocument xml) { //kamus data StringWriter stringWriter; XmlTextWriter xmlTextWriter; //algoritma //inisialisasi create object stringWriter = new StringWriter(); xmlTextWriter = new XmlTextWriter(stringWriter); xml.WriteTo(xmlTextWriter); //return value return stringWriter.ToString(); } /// <summary> /// Fungsi tambahan apabila ingin memasukkan data XML ke dalam Dataset /// /// <param name="fileName"> ///
public static DataSet ConvertXml2Dataset(string fileName) { //kamus DataSet dataSet; //algoritma //inisialisasi dataSet = new DataSet(); //read into dataset dataSet.ReadXml(fileName); //return single table inside of dataset return dataSet; } /// <summary> /// fungsi search data dari suatu account twitter, merupakan gabungan dari beberapa fungsi yang telah didefinisikan /// /// <param name="sender"> /// <param name="e"> private void btnSearch_Click(object sender, RoutedEventArgs e) { //KAMUS DATA XmlDocument doc, docFriends, docFollower; XmlElement rootUser, rootFriends, rootFollowers; XmlNodeList elemListFriends, elemListFollowers; //ALGORITMA //inisialisasi lbInfoUser.Items.Clear(); lbFriends.Items.Clear(); lbFollower.Items.Clear(); //ambil data dari TWITTER API
doc = GetResponse("http://api.twitter.com/1/users/show.xml?screen_name=" + textBox1.Text + ""); docFriends = GetResponse("http://api.twitter.com/1/statuses/friends.xml?screen_name=" + textBox1.Text + ""); docFollower = GetResponse("http://api.twitter.com/1/statuses/followers.xml?screen_name=" + textBox1.Text + ""); imgUser.Source = new BitmapImage(new Uri("http://api.twitter.com/1/users/profile_image?screen_name=" + textBox1.Text + "&size=normal")); //informasi user rootUser = doc.DocumentElement; //informasi friends rootFriends = docFriends.DocumentElement; //root-nya adalah <users type="array"> elemListFriends = rootFriends.ChildNodes; //elemennya terdiri dari <user> ... <user> //informasi follower rootFollowers = docFollower.DocumentElement; elemListFollowers = rootFollowers.ChildNodes; //memuculkan informasi USER lbInfoUser.Items.Add("Nama Lengkap: " + rootUser.GetElementsByTagName("name").Item(0).InnerText); lbInfoUser.Items.Add("Alias: " + rootUser.GetElementsByTagName("screen_name").Item(0).InnerText); lbInfoUser.Items.Add("Lokasi: " + rootUser.GetElementsByTagName("location").Item(0).InnerText); lbInfoUser.Items.Add("Deskripsi: " + rootUser.GetElementsByTagName("description").Item(0).InnerText); //entri data ke dalam listbox FRIENDS for (int i = 0; i < elemListFriends.Count; i++) { // Item(i) mengambil satu demi satu node user, // ChildNodes[...] mengambil komponen dari suatu node user lbFriends.Items.Add((i + 1).ToString() + ". Nama Lengkap: " + elemListFriends.Item(i).ChildNodes[1].InnerText); lbFriends.Items.Add(" Alias: " + elemListFriends.Item(i).ChildNodes[2].InnerText); lbFriends.Items.Add(" Lokasi: " + elemListFriends.Item(i).ChildNodes[3].InnerText); lbFriends.Items.Add(" "); } //entri data ke dalam listbox FOLLOWER for (int i = 0; i < elemListFollowers.Count; i++) { // Item(i) mengambil satu demi satu node user, // ChildNodes[...] mengambil komponen dari suatu node user lbFollower.Items.Add((i + 1).ToString() + ". Nama Lengkap: " + elemListFollowers.Item(i).ChildNodes[1].InnerText); lbFollower.Items.Add(" Alias: " + elemListFollowers.Item(i).ChildNodes[2].InnerText); lbFollower.Items.Add(" Lokasi: " + elemListFollowers.Item(i).ChildNodes[3].InnerText); lbFollower.Items.Add(" "); } //apabila ingin dimasukkan ke dalam datagrid //string[] col = {"name"}; //DataTable dt = ConvertXmlNodeListToDataTable2(elemList, col); //dataGrid1.ItemsSource = dt.AsDataView(); } /// <summary> /// Fungsi tambahan apabila ingin memasukkan data XML ke dalam DataTable /// /// <param name="xnl"> ///
public static DataTable ConvertXmlNodeListToDataTable(XmlNodeList xnl) { //kamus DataTable dt; int TempColumn;
//algoritma //inisialisasi dt = new DataTable(); TempColumn = 0; foreach (XmlNode node in xnl.Item(0).ChildNodes) { TempColumn++; DataColumn dc = new DataColumn(node.Name, System.Type.GetType("System.String")); if (dt.Columns.Contains(node.Name)) { dt.Columns.Add(dc.ColumnName = dc.ColumnName + TempColumn.ToString()); } else { dt.Columns.Add(dc); } } int ColumnsCount = dt.Columns.Count; for (int i = 0; i < xnl.Count; i++) { DataRow dr = dt.NewRow(); for (int j = 0; j < ColumnsCount; j++) { dr[j] = xnl.Item(i).ChildNodes[j].InnerText; } dt.Rows.Add(dr); } //return value return dt; } /// <summary> /// Fungsi tambahan apabila ingin memasukkan data XML ke dalam DataTable /// /// <param name="xmlNodeList"> /// <param name="Columns"> ///
public DataTable ConvertXmlNodeListToDataTable2(XmlNodeList xmlNodeList, string[] Columns) { //kamus DataTable dataTable; //algoritma //Creating the DataTable. using (dataTable = new DataTable("DataTable")) { //Adding data Table columns based on the columns parameter foreach (string column in Columns) { dataTable.Columns.Add(column); } //Adding rows with values. DataRow dataRow; foreach (XmlNode node in xmlNodeList) { dataRow = dataTable.NewRow(); foreach (string column in Columns) { if (node != null) { dataRow[column] = node.SelectSingleNode(column).InnerText; } } dataTable.Rows.Add(dataRow); } //return value return dataTable; } } } }