Test Twitter Friendships with PHP

By  on  

Another awesome functionality provided by Twitter is the ability to test friendships between two people. I mean testing if two people follow each other, not if one spams the world with crap tweets. Just as with every other Twitter API call, executing this test is easy with PHP.

The PHP

/* persons to test */
$person1 = 'davidwalshblog';
$person2 = 'mootools';

/* send request to twitter */
$url = 'http://twitter.com/friendships/exists';
$format = 'xml';

/* check */
$persons12 = make_request($url.'.'.$format.'?user_a='.$person1.'&user_b='.$person2);
$result = get_match('/<friends>(.*)<\/friends>/isU',$persons12);
echo '<pre>Am I friends with @mootools?'.$result.'</pre>'; // returns "true" or "false"

/* makes the request */
function make_request($url) {
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	$result = curl_exec($ch);
	curl_close($ch);
	return $result;
}

/* gets the match */
function get_match($regex,$content)
{
	preg_match($regex,$content,$matches);
	return $matches[1];
}

That's it. I didn't use SimpleXML in my example because of the small size of the return XML. Too much extra overhead. Here's the XML sample response:

<friends>true</friends>

The Twitter API is fun, isn't it?

Recent Features

  • By
    Creating Scrolling Parallax Effects with CSS

    Introduction For quite a long time now websites with the so called "parallax" effect have been really popular. In case you have not heard of this effect, it basically includes different layers of images that are moving in different directions or with different speed. This leads to a...

  • By
    Serving Fonts from CDN

    For maximum performance, we all know we must put our assets on CDN (another domain).  Along with those assets are custom web fonts.  Unfortunately custom web fonts via CDN (or any cross-domain font request) don't work in Firefox or Internet Explorer (correctly so, by spec) though...

Incredible Demos

  • By
    Create a Download Package Using MooTools Moousture

    Zohaib Sibt-e-Hassan recently released a great mouse gestures library for MooTools called Moousture. Moousture allows you to trigger functionality by moving your mouse in specified custom patterns. Too illustrate Moousture's value, I've created an image download builder using Mooustures and PHP. The XHTML We provide...

  • By
    Modal-Style Text Selection with Fokus

    Every once in a while I find a tiny JavaScript library that does something very specific, very well.  My latest find, Fokus, is a utility that listens for text selection within the page, and when such an event occurs, shows a beautiful modal dialog in...

Discussion

  1. What does the isU bit do on the regex?

  2. @ben: i = case insensitive, s = dot matches all (newlines included), U = ungreedy modifier (same as (.*?))

  3. So are there any advantages to using CURL over a simple file_get_contents($url) to make the request?

  4. @Steve: CURL is generally faster and more secure.

  5. Great stuff David, I’ve only had the chance to play with the basics of the Twitter API so you just gave me a few ideas for when I get bored.

    @Steve: I asked the same question to David once and believe he is correct. Check out this post (comments section), and then follow the benchmark link that David links to– http://davidwalsh.name/create-short-urls-unu

  6. Wow that is faster! That’s good to know. I’ve been using file_get_contents for simple tasks since it only takes one line and seems to be more widely supported.

    Anyway, good post. I can see some creative uses coming from this.

  7. saif

    Dear, for me……..showing error message 400 for curl.
    :(

  8. David, if the return value is “false, we’re not friends” is there a way to add them using the API?

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!