Jump to content

Recommended Posts

Posted

About handling the display of images from a twitter feed, I did this today by adding code inside MarkupTwitterFeed.module. I post it here in case it could help other pw users having the same needs.

// To be added in public function renderItem, before: $out = $options['listItemOpen']; 

	if (isset($item['entities']['media'])) {
	    $mediaUrlField = wire('config')->https ? 'media_url_https' : 'media_url';
	    
	    foreach($item['entities']['media'] as $m) {
		if($options['listItemPhoto']) {
		    $photoHtml = str_replace(array('{src}', '{title}'), 
					     array(wire('sanitizer')->entities($m[$mediaUrlField]), 
                                                   wire('sanitizer')->entities($m['display_url'])), 
					     $options['listItemPhoto']); 
		    $text = preg_replace('!' . preg_quote($m['url'], '!') . '(\b|$)!i', $photoHtml, $text); 
		} else {
		    // Hide the media reference in the text
		    $text = preg_replace('!' . preg_quote($m['url'], '!') . '(\b|$)!i', '', $text); 
		}	
	    }
	}

where $options['listItemPhoto'] contains the html for a Twitter photo. For example, if you simply want to display the image, you can set it to:

$options['listItemPhoto'] = "<img src='{src}' title='{title}'>";

This will be rendered like in this screenshot:

post-2086-0-30680600-1425905381_thumb.pn

  • Like 4
  • 1 month later...
Posted

Doesn't work here either.

Also @ Mentions and # Hashtags.

Can anybody help me to get the hashtags and mentions to work?

They're shown, but not 'linked' as mentioned before.

Any help would be appreciated!

  • 4 weeks later...
Posted

Had some time to look at the module and it looks like links were not in the original plan. Would require some editing of the module to allow links, especially as entities are converted. Will look at this when i have some time.

  • 3 months later...
Posted

I tested adding this function to the module:

<?php
function convert_twitter_links($tweet)
{
	//converts URLs to active links
	$tweet = preg_replace('/((http)+(s)?:\/\/[^<>\s]+)/i', '<a href="$0" target="_blank">$0</a>', $tweet );

	//converts mentions (e.g. @stathisg) to active links, pointing to the user's twitter profile
	$tweet = preg_replace('/[@]+([A-Za-z0-9-_]+)/', '<a href="http://twitter.com/$1" target="_blank">$1</a>', $tweet );

	//converts hashtags (e.g. #test) to active links, pointing to a twitter's search URL
	$tweet = preg_replace('/[#]+([A-Za-z0-9-_]+)/', '<a href="http://twitter.com/search?q=%23$1" target="_blank">$0</a>', $tweet );
	return $tweet;
}

and then called it like this: 

$text = $this->convert_twitter_links($text); 

Though, I had to put this line just below this line (this is within renderItem() definition ):

$text = wire('sanitizer')->entities($text);

I will guess I must be doing something wrong here not sanitizing this string before rendering it, but I can't really tell, I don't know much about this "entities" methods, so I will recommend taking this solution as unsafe or something like that until someone else gives a hand :)

  • Like 1
  • 1 month later...
Posted

Here's a working code example that doesn't use render and implements elabx's function mentioned above:

<ul>
	<?php

	$i = 0;
	$limit = 4;
	$t = $modules->get('MarkupTwitterFeed'); 

	function convert_links($tweet) {
		$tweet = preg_replace('/((http)+(s)?:\/\/[^<>\s]+)/i', '<a href="$0" target="_blank">$0</a>', $tweet );
		$tweet = preg_replace('/[@]+([A-Za-z0-9-_]+)/', '<a href="http://twitter.com/$1" target="_blank">$1</a>', $tweet );
		$tweet = preg_replace('/[#]+([A-Za-z0-9-_]+)/', '<a href="http://twitter.com/search?q=%23$1" target="_blank">$0</a>', $tweet );
		return $tweet;
	}

	foreach ($t as $tweet){
		if ($i < $limit){
			$text = convert_links($tweet['text']);			
			$timestamp = date('F j g:i a', strtotime($tweet['created_at']));
			echo '<li>'.$text.'<br><small>'.$timestamp.'</small></li>';
		}
		$i++;
	}

	?>
</ul>
  • Like 1
Posted

A variant of the IF statement section from the above example that checks whether a Tweet is a retweet, and displays the appropriate author information.

if ($i < $limit){
	$text = convert_links($tweet['text']);
	$timestamp = date('F j g:i a', strtotime($tweet['created_at']));

	echo '<li>';

	if ($tweet['retweeted']){
		$author = $tweet['retweeted_status']['user']['name']; // Other Person
		$handle = $tweet['retweeted_status']['user']['screen_name']; // @otherPerson
		$text = substr($text, 3); // Removes 'RT ' from the beginning of the Tweet
	} else {
		$author = $tweet['user']['name']; // You
		$handle = $tweet['user']['screen_name']; // @you
	}

	echo $author.' @'.$handle.'<br>'.$text.'<br>'.$timestamp.'</li>';
}

Note that the above requires the following change to MarkupTwitterFeed.module (line 138) to work :

'trim_user' => false, // include user details, because user details are useful
  • Like 2
  • 1 month later...
Posted

Thank you Acturus, got this code working now!

But I'm experiencing another problem: I can't show more than 3 Tweets, even though I've  set the limit in the module to 4...

  • 1 month later...
Posted

Thank you Acturus, got this code working now!

But I'm experiencing another problem: I can't show more than 3 Tweets, even though I've  set the limit in the module to 4...

I'm also experiencing this in 3.0, I set the limit to 5 but it's showing 13. I guess it's ignoring the limit in 3.0? 

  • 2 months later...
Posted

Hello,

I installed this module on a 3.0.12 devns site despite the fact that it is officially not compatible (yet?).

And it broke my backend theme which is  a custom admin theme based on the default theme with only very slight changes to the theme header and the content width.

I needed to manually delete my custom admin theme from the modules table in the DB to get a working backend again.

Finally, I downgraded the site to 2.7.2 so I can use the twitter markup module. Site is still under development and I don't really need all the new features from devns branch.

Has anyone else experienced problems with this module on 3.0.x?

  • 1 month later...
Posted

I'm also experiencing this in 3.0, I set the limit to 5 but it's showing 13. I guess it's ignoring the limit in 3.0? 

@Tom. Yea I'm getting the same issue my side!

  • 2 months later...
Posted
10 hours ago, benbyf said:

probably a stupid question but can this module be used to search hastags instead of outputting profile tweets?

actually, no.

Posted

 @benbyf

I forked the module and added the functionality, you can find the module at github: https://github.com/flydev-fr/MarkupTwitterFeed

To search hashtag use it as the following :

$options = array(
    'searchQuery' => 'ProcessWire',
    'limit' => 3
);
$t = $modules->get('MarkupTwitterFeed');
$out =  $t->search($options);
echo $out;

The function search() act like render().

Thanks again for the suggestion (searching for hashtag). I think we can improve it a bit, let me know for any needs.

  • Like 6
  • 2 months later...
Posted

Hello,

If you use this module, you may be interested by my fork https://github.com/jlj/MarkupTwitterFeed, that adds the following features to the official MarkupTweeterFeed module:

  • support of the recent Twitter extended tweet format (tweets longer than 140 chars);
  • support of emoji characters in tweets;
  • display of image in a tweet (only the first image is displayed in the curent version);
  • display of video in a tweet (with a html5 video markup);
  • for retweets, display of the original author and avatar in the tweet.

Also, it allows a more flexible per-item rendering, as in the following example:

$t = $modules->get('MarkupTwitterFeed');
$t->limit = 10; 

$renderOptions = array(
    'showDate' => 'before, after',
    'dateFormat' => __("M j, Y"), // Tweet block date format
    'listItemOpen' => "\n\t<div class='tweet-item'>",
    'listItemClose' => "</div>",
    'listItemText' => "<i class='fa fa-twitter'></i> <span class='tweet-text'>{text}</span>",
    'listItemDate' => " <div class='date'><i class='fa fa-calendar'></i> {date}</div>", 
    'listItemLink' => "<a rel='nofollow' href='{href}'>{url}</a>", 
    'videoAttributes' => "autoplay loop muted",
    'preserveLineBreaks' => 'coalesce',
);

foreach($t as $tweet) {
  echo $t->renderItem($tweet, $renderOptions);
}

Examples from my website:

Capture d’écran 2016-11-13 à 16.19.17.pngCapture d’écran 2016-11-13 à 16.19.50.png

This module has been tested with pw 2.7.2 only, so I cannot guarantee the proper working with 3.0… :-)

Hope this will be useful for others here.

  • Like 8
  • 3 months later...
  • 1 month later...
Posted

Jean Luc, 

I have installed your fork on Processwire 3.0.42 and get the following error:

Parse error: syntax error, unexpected 'site' (T_STRING), expecting ',' or ')'

File: .../modules/MarkupTwitterFeed/tmhOAuth/tmhOAuth.php:14

 *
 5:     * An OAuth library written in PHP.
 6:     * The library supports file uploading using multipart/form as well as general
 7:     * REST requests. OAuth authentication is sent using an Authorization Header.
 8:     *
 9:     * @author themattharris
10:     * @version 0.8.4
11:     *
12:     * 06 Aug 2014
13:     */
14:    defined('\ProcessWire\wire("config")->paths->root . 'site/modules/MarkupTwitterFeed/tmhOAuth'') or define('\ProcessWire\wire("config")->paths->root . 'site/modules/MarkupTwitterFeed/tmhOAuth'', dirname(\ProcessWire\wire("config")->paths->root . 'site/modules/MarkupTwitterFeed/tmhOAuth/tmhOAuth.php'));
15:    
16:    class tmhOAuth {
17:      const VERSION = '0.8.4';
18:      var $response = array();

Any ideas how to get around this? I upgrade your module over the one from Ryan. 

 

Thanks

Posted
3 hours ago, erikvanberkum said:

I have installed your fork on Processwire 3.0.42 and get the following error:

Parse error: syntax error, unexpected 'site' (T_STRING), expecting ',' or ')'

File: .../modules/MarkupTwitterFeed/tmhOAuth/tmhOAuth.php:14

Any ideas how to get around this? I upgrade your module over the one from Ryan. 


14:    defined('\ProcessWire\wire("config")->paths->root . 'site/modules/MarkupTwitterFeed/tmhOAuth'') or define('\ProcessWire\wire("config")->paths->root . 'site/modules/MarkupTwitterFeed/tmhOAuth'', dirname(\ProcessWire\wire("config")->paths->root . 'site/modules/MarkupTwitterFeed/tmhOAuth/tmhOAuth.php'));

 

Hi @erikvanberkum

I have not tried the MarkupTwitterFeed module with Processwire 3, but I can tell what caused the error here:

Actually the original tmhOAuth.php:14 is:

defined('__DIR__') or define('__DIR__', dirname(__FILE__));

This code makes the (visibly wrong here) assumption that PHP magic constant __DIR__ is not expanded when placed between single quotes. Here, __DIR__  was replaced by its value (a  PHP expression) at compile time, and the surrounding quotes around it cause a syntax error.

To solve this, you can simply comment or remove line 14 in tmhOAuth.php. Doing so which should be perfectly safe because __DIR__ is defined (probably by processwire), and so the check is not needed. :)

[Edit] __DIR__ is available since PHP 5.3.0, so with Processwire 3.x requiring PHP version 5.3.8 or higher, it is actually safe to delete line 14 of tmhOAuth.php.

Hope this helps.

Posted

Jean Luc,

Thank you for the prompt reply, commenting out line 14 did the trick, removed the error and the module is now fully functional in Processwire 3.0.42.

Kind regards, 


Erik van Berkum 

  • Like 1
Posted

Hi @ryan

 

I've been implementing the module in a project and first of all, it's a really nice module!

I have just 1 consideration, you have text for the most basic items (date, link, etc) but the text from the tweet is formatted without an HTML tag for example <p></p>.
Maybe it is possible to implement this? Then it would be possible to style the text itself better.

  • 5 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...