Skip to content

Instantly share code, notes, and snippets.

@mattheu
Last active December 26, 2015 07:39
Show Gist options
  • Save mattheu/7117050 to your computer and use it in GitHub Desktop.
Save mattheu/7117050 to your computer and use it in GitHub Desktop.
WP-CLI command to generate test content. Lorem ipsum post text and random images from the flickr api.
<?php
define( 'MPH_GENERATOR_FLICKR_API_KEY', '' );
if ( ! 'MPH_GENERATOR_FLICKR_API_KEY' )
die( 'You must define the Flickr API key.' );
if ( defined( 'WP_CLI' ) && WP_CLI ) {
/**
* Manage posts.
*
* @package wp-cli
*/
class MPH_Post_CLI extends WP_CLI_Command {
protected $imageLoader = false;
protected $obj_type = 'post';
protected $obj_fields = array(
'ID',
'post_title',
'post_name',
'post_date',
'post_status'
);
public function __construct() {
$this->imageLoader = new MPH_Generate_Image();
}
/**
* Generate some posts.
*
* ## OPTIONS
*
* [--count=<number>]
* : How many posts to generate. Default: 100
*
* [--post_type=<type>]
* : The type of the generated posts. Default: 'post'
*
* [--post_status=<status>]
* : The status of the generated posts. Default: 'publish'
*
* [--post_author=<login>]
* : The author of the generated posts. Default: none
*
* [--post_date=<yyyy-mm-dd>]
* : The date of the generated posts. Default: current date
*
* [--max_depth=<number>]
* : For hierarchical post types, generate child posts down to a certain depth. Default: 1
*
* ## EXAMPLES
*
* wp post generate --count=10 --post_type=page --post_date=1999-01-04
*/
public function generate( $args, $assoc_args ) {
global $wpdb;
$defaults = array(
'count' => 100,
'max_depth' => 1,
'post_type' => 'post',
'post_status' => 'publish',
'post_author' => false,
'post_date' => current_time( 'mysql' ),
);
extract( array_merge( $defaults, $assoc_args ), EXTR_SKIP );
// @codingStandardsIgnoreStart
if ( !post_type_exists( $post_type ) ) {
WP_CLI::error( sprintf( "'%s' is not a registered post type.", $post_type ) );
}
if ( $post_author ) {
$post_author = get_user_by( 'login', $post_author );
if ( $post_author )
$post_author = $post_author->ID;
}
// Get the total number of posts
$total = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = %s", $post_type ) );
$hierarchical = get_post_type_object( $post_type )->hierarchical;
$limit = $count + $total;
$notify = \WP_CLI\Utils\make_progress_bar( 'Generating posts', $count );
$current_depth = 1;
$current_parent = 0;
for ( $i = $total; $i < $limit; $i++ ) {
if ( $hierarchical ) {
if ( $this->maybe_make_child() && $current_depth < $max_depth ) {
$current_parent = $post_ids[$i-1];
$current_depth++;
} else if( $this->maybe_reset_depth() ) {
$current_depth = 1;
$current_parent = 0;
}
}
$args = array(
'post_type' => $post_type,
'post_title' => $this->get_lorem_ipsum( 1 ),
'post_status' => $post_status,
'post_author' => $post_author,
'post_parent' => $current_parent,
'post_name' => "post-$i",
'post_date' => $post_date,
'post_content' => $this->get_post_content()
);
$id = wp_insert_post( $args, true );
$notify->tick();
}
$notify->finish();
// @codingStandardsIgnoreEnd
}
private function maybe_make_child() {
// 50% chance of making child post
return ( mt_rand(1, 2) == 1 );
}
private function maybe_reset_depth() {
// 10% chance of reseting to root depth
return ( mt_rand(1, 10) == 7 );
}
private function get_rand_from_array( Array $array ) {
return $array[array_rand($array)];
}
private function get_post_content() {
$content = array();
$paragraph_count = $this->get_rand_from_array( array( 1,2,3,3,3,3,3,4,4,4,4,4,5,5,6 ) );
for ( $i=0; $i <= $paragraph_count; $i++ ) {
$content[] = $this->generate_html_paragraph();
if ( 1 === mt_rand(1, 5) && $i !== $paragraph_count && $i > 2 )
$content[] = $this->generate_html_heading();
if ( 1 === mt_rand(1, 5) && $i !== $paragraph_count )
$content[] = $this->generate_html_list();
}
return implode( "\r\r", $content );
}
private function generate_html_paragraph() {
$length = $this->get_rand_from_array( array( 1,2,3,3,4,4,4,4,4,5,5,6,7,8 ) );
return sprintf( '<p>%s</p>', $this->get_lorem_ipsum( $length ) );
}
private function generate_html_heading( $tag = 'rand' ) {
if ( $tag === 'rand' ) {
$tag = $this->get_rand_from_array( array( 'h2', 'h3', 'h3', 'h3', 'h3', 'h3', 'h4', 'h4', 'h5' ) );
}
return sprintf(
'<%1$s>%2$s</%1$s>',
$tag,
$this->get_lorem_ipsum( 1 )
);
}
private function generate_html_list( $tag = 'rand' ) {
$lis = array();
$length = $this->get_rand_from_array( array( 3,3,4,4,4,4,4,5,5,6,7,8 ) );
for ($i=0; $i <= $length; $i++) {
$lis[] = sprintf( '<li>%s</li>', $this->get_lorem_ipsum( 1 ) );
}
if ( 'rand' === $tag ) {
$tags = array( 'ul', 'ol' );
$tag = $tags[ array_rand( $tags ) ];
}
return sprintf(
'<%1$s>%2$s</%1$s>',
$tag,
implode( "\r", $lis )
);
}
private function get_lorem_ipsum( $length ) {
$strings = mph_get_lorem_strings();
$r = array();
for ( $i=0; $i < $length; $i++) {
array_push( $r, $strings[ array_rand( $strings ) ] );
}
return implode( ' ', $r );
}
/**
* Generate posts images from flickr.
*
* ## OPTIONS
*
* [--count=<number>]
* : How many posts to generate. Default: 100
*
* [--post_type=<type>]
* : The type of the generated posts. Default: 'post'
*
* [--post_status=<status>]
* : The status of the generated posts. Default: 'publish'
*
* [--post_author=<login>]
* : The author of the generated posts. Default: none
*
* [--post_date=<yyyy-mm-dd>]
* : The date of the generated posts. Default: current date
*
* [--max_depth=<number>]
* : For hierarchical post types, generate child posts down to a certain depth. Default: 1
*
* ## EXAMPLES
*
* wp post generate_images --count=10 --post_type=page
*/
public function generate_images( $args, $assoc_args ) {
global $wpdb;
$defaults = array(
'count' => 100,
'max_depth' => 1,
'post_type' => 'post',
);
extract( array_merge( $defaults, $assoc_args ), EXTR_SKIP );
// @codingStandardsIgnoreStart
if ( !post_type_exists( $post_type ) ) {
WP_CLI::error( sprintf( "'%s' is not a registered post type.", $post_type ) );
}
$posts = get_posts( array(
'post_type' => $post_type,
'posts_per_page' => $count,
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'compare' => 'NOT EXISTS',
)
),
// 'fields' => 'ids',
'post_status' => 'publish',
'orderby' => 'rand'
) );
$notify = \WP_CLI\Utils\make_progress_bar( 'Generating posts', $count );
foreach ( $posts as $post ) {
$content = explode( "\r", $post->post_content );
$images = $this->generate_html_images( mt_rand( 1, 6 ), $post->ID );
if ( ! empty( $images ) ) {
foreach ( $images as $image ) {
// Insert into content.
$position = mt_rand( 0, count( $content ) );
$temp_arr = array_slice( $content, $position, count( $content ) );
array_splice( $content, $position, count( $content ) );
$content[] = $image;
$content = array_merge( $content, $temp_arr );
}
}
$content = implode( "\r", $content );
wp_update_post( array(
'ID' => $post->ID,
'post_content' => $content
) );
$notify->tick();
}
$notify->finish();
// @codingStandardsIgnoreEnd
}
private function generate_html_images( $count, $post_id ) {
$images = $this->imageLoader->get_image_srcs();
$r = array();
$thumbnail_set = false;
foreach ( $images as $image ) {
$size = $this->get_rand_from_array( array( 'thumbnail', 'medium', 'medium', 'large', 'large', 'large' ) );
$alignment = $this->get_rand_from_array( array( 'left', 'right' ) );
$classes = sprintf( 'size-%s align%s', $size, $alignment );
// Sideload images
$image_id = $this->sideload_image( $image['src'], $post_id, $image['title'] );
$r[] = wp_get_attachment_image( $image_id, $size, false, array( 'class' => $classes ) );
if ( ! $thumbnail_set )
update_post_meta( $post_id, '_thumbnail_id', $image_id );
}
return $r;
}
public function sideload_image ( $src, $post_id = null, $desc = null ) {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
if ( ! empty( $src ) ) {
// Fix issues with double encoding
$src = urldecode( $src );
// Set variables for storage
// fix src filename for query strings
preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $src, $matches);
if ( empty( $matches ) )
return false;
// Download file to temp location
$tmp = download_url( $src );
$file_array = array();
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// If error storing temporarily, unlink
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
return false;
}
// do the validation and storage stuff
$id = media_handle_sideload( $file_array, $post_id, $desc );
// If error storing permanently, unlink
if ( is_wp_error($id) ) {
@unlink($file_array['tmp_name']);
return false;
}
return $id;
}
return false;
}
}
WP_CLI::add_command( 'mph_post', 'MPH_Post_CLI' );
}
class MPH_Generate_Image {
private $data = array();
function get_data( $search ) {
$search = str_replace( ' ', '+', $search );
$api_url_base = 'http://api.flickr.com/services/rest/';
$api_url_base = add_query_arg( array(
'method' => 'flickr.interestingness.getList',
'api_key' => MPH_GENERATOR_FLICKR_API_KEY,
'format' => 'json',
'nojsoncallback' => 1,
'per_page' => 500,
), $api_url_base );
$hash = hash( 'md5', $api_url_base );
if ( ! empty( $this->data[$hash] ) )
return $this->data[$hash];
$this->data[$hash] = array();
$response = wp_remote_get( $api_url_base );
$response = wp_remote_retrieve_body( $response );
$response = json_decode( $response );
if ( $response && isset( $response->photos ) && isset( $response->photos->photo ) ) {
foreach ( (array) $response->photos->photo as $photo ) {
$title = $photo->title;
if ( ! empty( $search ) )
$title = $search . ' - ' . $title;
$this->data[$hash][] = array(
'title' => $title,
'src' => sprintf(
'http://farm%s.staticflickr.com/%s/%s_%s_b.jpg',
$photo->farm,
$photo->server,
$photo->id,
$photo->secret
)
);
}
set_transient( $hash, $this->data[$hash], 3600 );
} else {
return array();
}
return $this->data[$hash];
}
function get_image_srcs( $search = '', $count = 1 ) {
$r = array();
$photos = $this->get_data( $search );
if ( empty( $photos ) )
return $r;
for ( $i=0; $i < $count; $i++ ) {
$key = array_rand( $photos );
$r[] = $photos[$key];
unset( $photos[$key] );
}
return $r;
}
}
function mph_get_lorem_strings() {
return array(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'Donec sit amet purus id urna aliquam vehicula.',
'Donec vitae mattis velit, sed tincidunt massa.',
'Quisque sed metus in purus tempus scelerisque id at dui.',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'Maecenas lacinia aliquet volutpat.',
'Nunc sed tempor est, vel porta odio.',
'Duis imperdiet consequat pellentesque.',
'Etiam adipiscing turpis in varius congue.',
'Donec mattis turpis tellus, a eleifend magna pellentesque vitae.',
'Morbi a euismod enim.',
'Nam non tempus odio, quis rhoncus libero.',
'Quisque ac felis vel libero sollicitudin egestas in ac orci.',
'Praesent porttitor urna a facilisis molestie.',
'Praesent in quam ultricies, ornare mauris nec, mollis quam.',
'Donec sem quam, gravida nec lectus placerat, placerat cursus justo.',
'Sed vel orci euismod, pellentesque nisi a, ultricies augue.',
'Aenean a risus nec diam molestie condimentum a in leo.',
'Nulla massa nulla, facilisis ac lectus non, consectetur ultrices dui.',
'Suspendisse mattis ipsum justo, at pulvinar purus feugiat eget.',
'Quisque porttitor est vel elit tempus, sit amet tincidunt lacus blandit.',
'Vivamus viverra tellus sit amet massa sodales varius.',
'Nunc dignissim urna a dui adipiscing, at mattis magna convallis.',
'Nulla libero justo, venenatis eu hendrerit ultricies, semper at diam.',
'Nunc viverra nibh sit amet ante pulvinar fermentum.',
'Fusce volutpat consequat nulla, in scelerisque nisl vehicula sit amet.',
'Maecenas et quam ipsum.',
'Duis lacinia vitae est vestibulum laoreet.',
'Vestibulum sit amet elementum lorem.',
'Aenean lacinia nibh id placerat feugiat.',
'Fusce ullamcorper sapien augue, ut viverra felis blandit ut.',
'Proin faucibus mauris velit, sed blandit metus gravida a.',
'In auctor ultricies iaculis.',
'Mauris feugiat est in enim ultricies, nec mollis massa porttitor.',
'Proin a augue a diam posuere egestas nec et augue.',
'Maecenas gravida faucibus velit, lacinia ultricies magna mattis non.',
'Vestibulum vestibulum lorem vel quam condimentum mollis.',
'Mauris iaculis tristique diam, aliquet pretium enim lobortis lobortis.',
'Maecenas non tellus a purus ultricies convallis.',
'Donec nisi leo, fringilla eget imperdiet nec, interdum sed mauris.',
'Duis pellentesque sem orci, nec dignissim dolor egestas vitae.',
'Nunc vel lorem eu nisl dictum semper.',
'In vel lorem nec ligula malesuada faucibus eu tincidunt urna.',
'Nunc vitae nunc ipsum.',
'Morbi ut lorem ac mi aliquet facilisis condimentum pharetra odio.',
'Suspendisse enim nibh, bibendum ac vehicula vel, sodales eget elit.',
'Nam congue at nisl ac consequat.',
'Proin vehicula tincidunt turpis, tincidunt interdum lorem rutrum sed.',
'Praesent condimentum eu urna eu convallis.',
'In convallis lectus nec mi rutrum blandit.',
'Nulla facilisi.',
'Proin semper leo lacinia, congue lorem sed, consectetur orci.',
'Nam malesuada enim sit amet enim faucibus lacinia.',
'Aenean pulvinar nec purus ac tincidunt.',
'Vestibulum tincidunt risus id dui fringilla fermentum.',
'Mauris consequat ac nisi ut dignissim.',
'Nullam sodales libero enim, eget aliquam elit molestie et.',
'Cras laoreet dictum velit eu dapibus.',
'Vivamus ligula augue, varius nec eros vel, luctus iaculis elit.',
'Sed leo nisi, blandit eu ante non, iaculis elementum nisl.',
'Nullam vehicula tincidunt mauris eu egestas.',
'Suspendisse sit amet bibendum ipsum.',
'Sed dapibus viverra felis, vel pharetra risus fermentum vitae.',
'Suspendisse quis luctus magna.',
'Quisque eget diam id purus interdum posuere.',
'Vestibulum varius at dolor ut condimentum.',
'Aenean id elit justo.',
'In orci ipsum, lacinia vitae cursus et, iaculis et turpis.',
'Suspendisse potenti.',
'Integer id cursus velit.',
'Praesent condimentum mauris in orci ullamcorper vehicula vitae sit amet diam.',
'Nunc rutrum bibendum dapibus.',
'Curabitur ac tincidunt eros.',
'Vestibulum nibh elit, aliquam ut felis vel, ultricies vestibulum neque.',
'Aenean adipiscing lacus id vulputate fringilla.',
'Suspendisse vel purus et diam ullamcorper cursus.',
'Nunc fermentum consequat turpis, vitae cursus nulla lacinia a.',
'Etiam eget lorem erat.',
'Sed fringilla leo a facilisis iaculis.',
'Ut vitae bibendum mauris, vulputate consequat felis.',
'Integer pretium convallis diam quis eleifend.',
'Interdum et malesuada fames ac ante ipsum primis in faucibus.',
'Donec at est odio.',
'Sed aliquet ante metus, at fringilla diam faucibus quis.',
'Vestibulum in cursus metus.',
'Nullam imperdiet, arcu ac blandit cursus, odio neque egestas felis, sed adipiscing purus eros vitae dui.',
'Donec sodales ac turpis non malesuada.',
'Donec dapibus tempus aliquam.',
'Sed feugiat nibh eu nulla euismod ullamcorper.',
'Vestibulum tincidunt mollis dui, eu volutpat arcu suscipit id.',
'Nam lobortis condimentum tincidunt.',
'Vestibulum auctor vel massa ac commodo.',
'Nam viverra, ipsum at viverra imperdiet, urna quam sollicitudin enim, sit amet ornare est nulla et risus.',
'Suspendisse nec luctus justo.',
'Aliquam erat volutpat.',
'Proin tellus sapien, gravida at euismod tristique, scelerisque ut lorem.',
'Duis varius non tellus eget congue.',
'Etiam facilisis pharetra lectus lobortis ornare.',
'Fusce rhoncus dictum urna.',
'Fusce in posuere mi.',
'Morbi sit amet pharetra nibh.',
'Proin eros felis, suscipit ac magna ut, varius ultricies dui.',
'Integer ac risus eu libero euismod ultricies.',
'In ultrices adipiscing mauris ac adipiscing.',
'Aenean tempus, diam vel dictum sagittis, nibh tellus commodo risus, quis interdum orci felis in odio.',
'In hac habitasse platea dictumst.',
'Fusce semper nisi vel magna mollis, a pretium justo suscipit.',
'Nullam varius dolor quis porttitor laoreet.',
'Morbi magna ligula, tincidunt ac vestibulum et, gravida tempus ipsum.',
'Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
'Aenean interdum posuere nunc.',
'Quisque et neque et mi aliquet imperdiet et vitae velit.',
'Donec sed feugiat elit.',
'Duis ut velit vulputate, laoreet tortor vitae, congue orci.',
'Phasellus accumsan sapien dolor, eu lacinia felis auctor id.',
'In quis purus ut massa cursus dictum.',
'Vivamus a mi lacinia, sodales arcu at, elementum leo.',
'Nullam convallis erat quis ligula tempus dignissim.',
'Sed vel condimentum massa.',
'In tempor convallis leo at lacinia.',
'Mauris dictum urna eu libero aliquet vestibulum.',
'Maecenas et turpis et sapien sollicitudin lobortis.',
'Duis tempus pretium nibh et mattis.',
'Cras vitae lacus consectetur, tempus mi eu, lacinia lectus.',
'Nunc vestibulum arcu vel purus accumsan malesuada.',
'Nunc sed mi vitae nisi mattis vestibulum.',
'Nam porta eleifend leo, id posuere risus venenatis ut.',
'Sed fringilla molestie dapibus.',
'Proin vestibulum dolor et luctus lobortis.',
'Aenean placerat lacus vel luctus hendrerit.',
'Morbi lacinia, purus sit amet ornare sagittis, ipsum dui semper turpis, ut elementum metus nisl at massa.',
'Nunc ligula nisl, tempor in turpis a, faucibus commodo leo.',
'Proin nec tellus at orci rhoncus elementum ac in velit.',
'Quisque ac risus ipsum.',
'Suspendisse ligula lorem, consequat in erat quis, rhoncus vestibulum leo.',
'Nulla facilisi.',
'Integer convallis eget ante a porttitor.',
'Ut a faucibus dui.',
'Sed fermentum eros et aliquam facilisis.',
'Integer nec luctus nibh.',
'Vestibulum rutrum semper urna eu luctus.',
'Phasellus sodales eros purus, non rhoncus elit molestie non.',
'Integer ut arcu ac nisi dictum convallis.',
'Donec consectetur, dolor quis vehicula congue, leo ante mollis nisi, ut porttitor sem est vitae justo.',
'Phasellus nec porta est.',
'Etiam sollicitudin mauris id nisl gravida dapibus.',
'Nullam vitae lacus ipsum.',
'Nunc varius laoreet molestie.',
'Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
'Etiam nec diam ut diam lobortis auctor.',
'Suspendisse consectetur eu massa et tempor.',
'Maecenas eget tempus nibh, nec lacinia est.',
'Proin auctor faucibus diam in imperdiet.',
'Donec non neque eleifend, pulvinar velit vel, consequat lorem.',
'Nulla ultricies dictum metus, eu suscipit magna suscipit in.',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'Suspendisse nec quam a urna eleifend aliquet et a ligula.',
'Donec tempus erat a rhoncus scelerisque.',
'Nam faucibus facilisis purus, vitae semper quam.',
'Interdum et malesuada fames ac ante ipsum primis in faucibus.',
'Aenean hendrerit convallis venenatis.',
'Ut mattis congue aliquam.',
'Proin diam nibh, varius eget ullamcorper ac, molestie sed nulla.',
'Nam mollis dapibus nulla, et placerat justo gravida eu.',
'Suspendisse pretium pellentesque augue, quis volutpat enim sagittis ut.',
'Donec ac ligula velit.',
'Etiam porttitor vel lacus in venenatis.',
'Donec viverra consectetur nisi, et rutrum tellus malesuada ac.',
'Nunc lobortis feugiat purus sed tincidunt.',
'Morbi est nisl, rutrum eu fermentum in, pellentesque at metus.',
'Fusce pulvinar felis ipsum, et tempus lectus pellentesque sed.',
'Quisque lacus tellus, suscipit ut risus et, condimentum tincidunt ante.',
'Phasellus semper et odio sit amet eleifend.',
'Vivamus dapibus diam nec sapien pharetra sodales.',
'Curabitur gravida nunc id posuere cursus.',
'Vestibulum vel arcu hendrerit, hendrerit dolor et, lacinia tellus.',
'Vivamus at suscipit odio.',
'Praesent aliquam risus at tincidunt bibendum.',
'Etiam viverra vehicula justo, et blandit nulla iaculis ac.',
'Maecenas elementum ac leo eu egestas.',
'Phasellus nec magna ut felis vulputate blandit quis volutpat purus.',
'Suspendisse volutpat eget sem et varius.',
'Sed velit diam, gravida id mi eget, porttitor molestie tortor.',
'Ut nec diam sagittis, dignissim dui ac, pulvinar erat.',
'Maecenas ac felis volutpat, imperdiet arcu sed, accumsan diam.',
'Nulla posuere id massa ut dapibus.',
'Sed quis sapien viverra, viverra nulla eget, laoreet dui.',
'Cras vitae augue felis.',
'Nunc volutpat ornare mauris, sed pellentesque turpis posuere vitae.',
'Aliquam pulvinar mollis urna non rhoncus.',
'Quisque faucibus pulvinar justo, eu aliquam massa ultrices vel.',
'Donec quis tellus nulla.',
'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.',
'In rutrum sapien condimentum, tincidunt est vulputate, sagittis orci.',
'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.',
'Quisque mattis ante orci, at molestie massa accumsan quis.',
'Sed lorem arcu, consequat sit amet laoreet sed, cursus ut tellus.',
'Integer interdum placerat porttitor.',
'Curabitur nibh purus, scelerisque ac augue vitae, elementum vehicula arcu.',
'Duis accumsan ultricies justo in bibendum.',
'Nullam bibendum ornare mi, non ornare leo tincidunt ac.',
'In eu leo ut sem sodales condimentum.',
'Morbi ultrices dolor eget eros elementum condimentum.',
'Praesent imperdiet vitae dui ut mollis.',
'Maecenas lectus quam, ultricies sit amet blandit at, commodo vitae magna.',
'In malesuada porttitor ante vel pretium.',
'Praesent luctus nunc vitae massa euismod, eget volutpat mauris luctus.',
'Maecenas hendrerit posuere neque at ornare.',
'Pellentesque lacinia bibendum nulla, sed egestas libero ultrices ut.',
'Suspendisse id ultricies nulla.',
'Nulla imperdiet nisl non erat fermentum, sed condimentum lectus luctus.',
'Cras lacus augue, laoreet a porttitor vitae, elementum id est.',
'Fusce hendrerit mauris ac orci luctus volutpat.',
'Ut ac sapien sit amet felis suscipit rhoncus.',
'Nullam pellentesque, velit in tristique ultricies, leo tortor ullamcorper est, at tristique mauris libero quis sem.',
'Ut id dolor arcu.',
'Praesent rhoncus libero augue, nec viverra turpis eleifend sit amet.',
'Morbi pellentesque justo at commodo placerat.',
'Mauris adipiscing scelerisque tellus, quis laoreet arcu.',
'Etiam dapibus, libero in adipiscing lobortis, nulla leo pellentesque libero, ac tincidunt tellus felis vel ante.',
'Sed nec tortor eget leo porta porta.',
'Phasellus fringilla, eros ac sollicitudin venenatis, nibh justo mollis enim, at tristique nibh nisi nec nisl.',
'Donec mollis, mi et tincidunt interdum, nunc sem dapibus lacus, in venenatis magna orci vitae justo.',
'Ut congue blandit leo sed euismod.',
'Morbi sagittis ut lorem vel varius.',
'Praesent at nibh dignissim tortor cursus placerat vel vitae metus.',
'Suspendisse ullamcorper magna sed ligula tincidunt pellentesque.',
'Sed et felis ipsum.',
'Sed dapibus purus eget feugiat commodo.',
'Proin pharetra, velit id tempus pulvinar, ligula nisi tempus urna, a mattis erat enim quis neque.',
'Nullam quis faucibus dolor, non sagittis lectus.',
'Curabitur molestie est nec pellentesque congue.',
'Mauris pretium, risus ut vestibulum feugiat, dolor quam luctus mi, nec dapibus risus felis molestie mi.',
'Integer accumsan velit auctor risus eleifend, id porta sem vehicula.',
'Cras vulputate venenatis aliquam.',
'Maecenas elementum lacinia lorem, non pellentesque sem accumsan eget.',
'Fusce placerat sapien a nisl molestie, eu hendrerit dolor convallis.',
'Pellentesque nisi justo, gravida sed erat vel, pellentesque lacinia neque.',
'Duis tempor a quam sed suscipit.',
'Sed commodo libero volutpat condimentum elementum.',
'Fusce nec eleifend enim.',
'Mauris egestas id lorem et sollicitudin.',
'Donec adipiscing elit leo, sit amet malesuada ante cursus a.',
'Aliquam ultricies ultricies orci, nec venenatis augue lacinia sed.',
'Etiam et pretium libero, vel rhoncus turpis.',
'Cras egestas pharetra nisi ut semper.',
'Integer ante est, suscipit faucibus vulputate nec, facilisis at odio.',
'Nam rutrum cursus augue, sed dignissim purus tincidunt et.',
'Vivamus ac fringilla quam.',
'Maecenas blandit eget enim nec malesuada.',
'Nam eget vulputate purus, et eleifend turpis.',
'Aliquam tempor suscipit velit, sit amet fringilla libero scelerisque vitae.',
'Ut ac gravida massa, in varius nisi.',
'Interdum et malesuada fames ac ante ipsum primis in faucibus.',
'Integer ut sem quis nibh posuere consectetur eget eu odio.',
'Donec semper eros elit, ut iaculis eros ultrices sed.',
'Curabitur vitae leo lobortis, blandit turpis nec, tempor purus.',
'Fusce gravida mi ac lectus euismod rutrum.',
'Phasellus et sem augue.',
'Nullam ultricies quam tortor, eu malesuada tellus consequat ultrices.',
'Ut egestas mauris fermentum gravida cursus.',
'Nullam quis nisl nisl.',
'Curabitur erat risus, aliquam ac nisi vitae, tristique aliquam ligula.',
'Vestibulum consectetur massa nec velit malesuada aliquam.',
'Vestibulum consequat viverra lacus, non laoreet elit.',
'Vivamus semper, tortor eu malesuada aliquet, quam mauris faucibus est, eget mattis est justo tempor ipsum.',
'Proin pretium eleifend viverra.',
'Etiam eleifend condimentum enim, sed ornare nisi tincidunt scelerisque.',
'Integer eget cursus augue.',
'Vivamus fermentum mauris quis tempus eleifend.',
'Suspendisse at massa ornare erat imperdiet accumsan venenatis vel eros.',
'Suspendisse nulla purus, dignissim nec nisl accumsan, malesuada tempor orci.',
'Cras dignissim nibh vel purus eleifend rhoncus ac vitae purus.',
'Vestibulum vestibulum at velit ac blandit.',
'Quisque facilisis eleifend porttitor.',
'Donec ut felis viverra, cursus libero non, adipiscing neque.',
'Proin et nisl a tortor malesuada porta id vel tellus.',
'Etiam posuere ultrices erat.',
'Mauris adipiscing quam vitae eros adipiscing bibendum.',
'Ut molestie nulla ut placerat suscipit.',
'Duis sed fermentum sapien.',
'Praesent non lectus vitae turpis dapibus faucibus.',
'Fusce eget diam erat.',
'Curabitur non lectus ac nisl interdum fermentum sed vitae libero.',
'Fusce at tempor ligula.',
'Nulla facilisi.',
'Curabitur nec ultrices nisi.',
'Etiam eget lectus euismod, convallis tellus in, vulputate erat.',
'Morbi eleifend enim in feugiat porttitor.',
'Quisque sollicitudin sapien at elit consequat dignissim sed vitae elit.',
'Curabitur pellentesque commodo condimentum.',
'Ut lorem elit, elementum eget sagittis vel, faucibus vitae massa.',
'In a rhoncus ligula, nec lobortis sapien.',
'Morbi mollis nisi sit amet consequat feugiat.',
'Donec tincidunt, purus vel porta vulputate, odio velit egestas nibh, nec iaculis tortor dolor et tellus.',
'Phasellus non magna eget augue auctor auctor vulputate eu leo.',
'Pellentesque a elit ornare, blandit nunc a, consectetur nibh.',
'Donec posuere nibh eget tortor ultricies faucibus.',
'Donec vulputate erat eu mauris ultrices, sit amet eleifend purus interdum.',
'Praesent ante enim, dapibus in commodo nec, posuere in turpis.',
'In tempor, massa ac auctor pretium, ligula felis auctor velit, vitae elementum augue nisi quis ipsum.',
'Donec ac commodo erat.',
'Aliquam metus lacus, vulputate a nunc eu, posuere imperdiet lacus.',
'Curabitur facilisis lobortis arcu eu malesuada.',
'Duis sit amet pretium lacus.',
'Nam adipiscing ullamcorper molestie.',
'Suspendisse ultricies quam et orci sagittis consequat.',
'Curabitur et mauris quis nisl interdum laoreet et vel leo.',
'Quisque ut nisi malesuada, pellentesque arcu mattis, tincidunt est.',
'Nullam dignissim imperdiet rhoncus.',
'Suspendisse est diam, ultrices sed malesuada in, tincidunt vel erat.',
'Morbi congue ante ac dolor blandit, eu sagittis felis tempor.',
'Vestibulum ultrices euismod diam, vitae scelerisque magna.',
'Donec euismod, eros vitae elementum pretium, magna felis auctor lacus, at eleifend nisl neque id turpis.',
'Nunc vulputate ipsum quis lacus consectetur, vel consequat purus semper.',
'Phasellus varius malesuada leo ac gravida.',
'Proin lacinia urna vel lacus egestas, vel malesuada nibh mollis.',
'Integer vel ultricies dolor.',
'Nullam consequat nec velit eu iaculis.',
'Aenean lobortis lorem eros, tempus venenatis mi vulputate et.',
'Praesent vestibulum quam augue, in viverra nisi adipiscing quis.',
'Phasellus vitae lorem purus.',
'Aliquam erat volutpat.',
'Nunc rutrum ullamcorper faucibus.',
'Nulla consectetur nisl magna, gravida euismod tortor faucibus nec.',
'Duis tellus sem, facilisis sed pharetra in, luctus non mauris.',
'Phasellus nulla mi, tempor eget sem eu, consequat varius massa.',
'Fusce eros urna, malesuada vel tellus auctor, lacinia bibendum tortor.',
'Donec vitae gravida quam, at semper metus.',
'Morbi iaculis in ante ut interdum.',
'Nam elit elit, placerat vitae luctus interdum, posuere a lacus.',
'Donec posuere, mauris ut cursus pretium, nisi mi elementum sem, nec pretium sem augue ac risus.',
'Sed interdum dui at urna aliquam molestie.',
'Quisque vel suscipit diam.',
'Donec placerat ipsum et ipsum vehicula, id mollis diam feugiat.',
'Cras et mollis arcu.',
'Quisque at tincidunt sem.',
'Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.',
'Aliquam id nisl id elit feugiat consectetur tempus sit amet est.',
'Etiam sit amet egestas massa, eget adipiscing enim.',
'Phasellus molestie ultrices sapien, id mattis augue laoreet ut.',
'Nulla ac eleifend lacus.',
'Aliquam sodales neque quis ipsum viverra, a sagittis ipsum rhoncus.',
'Donec convallis ipsum ac augue convallis, ac placerat leo aliquet.',
'Morbi ac congue diam.',
'Nullam blandit sapien eget tristique rutrum.',
'Cras in mauris semper, egestas nulla eget, facilisis sem.',
'Suspendisse libero sapien, posuere quis convallis ac, posuere sit amet sem.',
'Ut justo leo, feugiat non enim eu, mollis egestas neque.',
'Pellentesque vel purus at tortor lacinia feugiat quis sodales nulla.',
'Proin nec congue turpis, congue ultricies purus.',
'Fusce ipsum nulla, tempus ut pharetra auctor, egestas non massa.',
'Nullam tincidunt lacus felis, quis tincidunt lacus iaculis aliquam.',
'Donec mollis risus ac est suscipit ullamcorper.',
'In libero felis, vulputate in purus et, tristique rutrum lorem.',
'Donec id placerat neque.',
'Sed a quam non arcu ultrices cursus vitae id elit.',
'Aliquam interdum pulvinar purus sed pulvinar.',
'Proin vulputate orci ac magna vulputate placerat.',
'Cras blandit eu lacus at venenatis.',
'Maecenas interdum sed tellus et tempor.',
'Nullam ut est mi.',
'Mauris a ante lorem.',
'Suspendisse potenti.',
'Nulla sit amet blandit mauris, ac pharetra nibh.',
'Sed pretium lacinia nulla.',
'Suspendisse eget tellus quis est suscipit consequat.',
'Cras feugiat cursus semper.',
'Praesent tempus id urna eget pulvinar.',
'Quisque adipiscing, eros id ullamcorper luctus, tortor urna faucibus nisi, id auctor nisi tortor non arcu.',
'Praesent imperdiet sapien a lorem rhoncus venenatis.',
'Donec a massa laoreet lorem auctor placerat sit amet sit amet odio.',
'Donec ut pharetra lorem.',
'Praesent ut condimentum lorem, sed dignissim magna.',
'Donec aliquet aliquam justo pellentesque consectetur.',
'Mauris fermentum diam ac eros lobortis euismod.',
'Praesent luctus porta nisi at porttitor.',
'Etiam porttitor, tortor scelerisque tincidunt dictum, lorem ante tempus eros, fermentum viverra massa orci eu velit.',
'Integer ultricies blandit purus sed consectetur.',
'Integer bibendum eget odio eu tincidunt.',
'Suspendisse tincidunt at massa in pellentesque.',
'Curabitur id dui a quam semper laoreet sit amet et libero.',
'Etiam facilisis magna non urna lobortis, ac auctor ipsum ultrices.',
'Curabitur id diam augue.',
'Proin suscipit tellus nec justo pulvinar, at suscipit lectus facilisis.',
'Fusce lorem erat, porttitor ac cursus et, lacinia at ante.',
'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.',
'Cras purus quam, laoreet ac ipsum eu, tristique consequat nibh.',
'Donec dignissim vel nisl vitae convallis.',
'Nunc sed orci hendrerit, dignissim nunc at, volutpat justo.',
'Nulla facilisi.',
'Maecenas consequat purus eros, sed mollis tortor auctor vitae.',
'Donec luctus lobortis libero vel ornare.',
'Cras et nulla ipsum.',
'Nunc hendrerit nisi ligula, consequat cursus quam varius adipiscing.',
'Suspendisse a suscipit nunc.',
'Nunc non ipsum sit amet tortor gravida mattis.',
'Praesent quis consequat nibh.',
'Suspendisse condimentum elit tristique hendrerit tincidunt.',
'Sed ultricies, purus quis scelerisque pellentesque, dolor elit tincidunt mi, quis dignissim orci metus blandit lectus.',
'Donec sit amet nisl fringilla, adipiscing nibh sed, varius elit.',
'Vestibulum a viverra ligula.',
'In hac habitasse platea dictumst.',
'Proin dictum adipiscing blandit.',
'Maecenas eu rutrum odio.',
'Vivamus non aliquam lacus.',
'Mauris bibendum elit molestie fringilla hendrerit.',
'Quisque commodo tortor vitae sapien aliquet, in pretium dolor vehicula.',
'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.',
'Nullam venenatis quam ut magna scelerisque eleifend eget vitae erat.',
'Nulla facilisi.',
'Nulla eleifend, ipsum et viverra mattis, risus enim fermentum nulla, nec tincidunt sapien mauris in turpis.',
'Integer vulputate velit nec sapien vestibulum volutpat.',
'Vivamus ut lectus quis felis lacinia vestibulum in a nisl.',
'Aliquam egestas, lorem nec fermentum hendrerit, velit enim semper leo, vitae molestie purus lectus non libero.',
'Morbi quis molestie lacus, et laoreet felis.',
'Sed feugiat mi quis tincidunt mollis.',
'Pellentesque bibendum, leo vitae accumsan cursus, ante ligula pharetra mauris, vel ultrices sem erat eget eros.',
'Vestibulum non lobortis nulla, ac viverra odio.',
'Suspendisse imperdiet feugiat varius.',
'Duis accumsan nunc quis libero hendrerit, eget placerat metus sollicitudin.',
'Donec diam lectus, bibendum at ligula vel, suscipit gravida mi.',
'Integer lobortis quam sed nisi suscipit faucibus.',
'Donec commodo cursus eros, nec egestas leo malesuada ac.',
'Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
'Nulla porta lectus nec metus ornare, eu suscipit mauris lobortis.',
'Donec egestas massa ipsum, ut lobortis sapien bibendum eget.',
'Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;',
'Curabitur sit amet est in tortor auctor ullamcorper.',
'Fusce quis libero feugiat, ultrices ipsum vel, posuere erat.',
'Aliquam erat volutpat.',
'Quisque eget dui non nunc molestie tincidunt.',
'Integer ac gravida neque, et mollis ligula.',
'Maecenas eu imperdiet mauris, vel tincidunt elit.',
'Aenean eget aliquam lectus.',
'Duis iaculis, tellus in scelerisque posuere, arcu leo congue augue, et luctus dolor nibh eget nisl.',
'Aliquam et lacus ac erat ornare venenatis a quis libero.',
'Cras sagittis nulla in diam suscipit tempus.',
'Sed a placerat arcu, id lobortis ligula.',
'Sed vitae eleifend nunc.',
'Aenean tincidunt, tortor vel varius iaculis, mauris libero commodo magna, nec viverra neque mauris et libero.',
'Ut quis rhoncus sapien.',
'Mauris ultrices consequat elit, vitae malesuada mi vestibulum pellentesque.',
'Aliquam mattis nisl at lorem rutrum, ut suscipit ipsum ultrices.',
'Nam et pellentesque metus.',
'Mauris placerat laoreet commodo.',
'Praesent placerat enim metus, sed malesuada purus sodales sed.',
'Sed vehicula tellus ac tempus egestas.',
'Aenean nec pulvinar quam, id placerat ante.',
'Duis sed elementum orci.',
'Nulla molestie elit a pulvinar blandit.',
'Etiam arcu nunc, rutrum quis vehicula quis, scelerisque eget mi.',
'Etiam facilisis sagittis sodales.',
'Phasellus at massa libero.',
'Vivamus egestas ligula at ipsum ullamcorper eleifend.',
'Integer tincidunt libero ut ligula hendrerit vulputate.',
'Maecenas eu adipiscing sem.',
'Quisque ipsum tellus, accumsan eu est quis, auctor tempus tellus.',
'Vivamus dictum quam non nisl vulputate aliquet.',
'Praesent vel dolor cursus mauris interdum facilisis.',
'Fusce imperdiet mauris quis erat tincidunt hendrerit.',
'Nulla convallis vestibulum nunc, ut malesuada dolor posuere quis.',
'Cras dictum massa venenatis, mattis sem sed, rutrum diam.',
'In eleifend sapien id ipsum ultricies, at mattis velit consectetur.',
'In egestas vehicula sodales.',
'Nulla scelerisque ornare dictum.',
'Maecenas dignissim neque velit, commodo mollis mauris ultrices ut.',
'Nulla sit amet neque sit amet tellus blandit sagittis porta adipiscing dolor.',
'Nullam tempor, nisi nec tincidunt convallis, ante est vehicula enim, in rhoncus eros lorem quis lacus.',
'Donec ullamcorper luctus orci.',
'Quisque accumsan, nisi in luctus eleifend, purus ante pulvinar sapien, quis vestibulum lorem arcu quis metus.',
'Donec felis justo, iaculis id purus non, lobortis tincidunt lorem.',
'Praesent ac neque sit amet lectus interdum imperdiet at ac lacus.',
'Pellentesque a neque non elit pharetra cursus.',
'Vestibulum vel adipiscing libero.',
'Sed vel venenatis nunc, et hendrerit metus.',
'Aliquam eget aliquam tellus.',
'Suspendisse dignissim libero ut risus elementum, eu commodo ante luctus.',
'Maecenas rhoncus nunc vitae est viverra rhoncus.',
'Proin tempor et tellus non faucibus.',
'Aliquam eu lacinia arcu.',
'Suspendisse tristique felis at augue hendrerit, non auctor ipsum suscipit.',
'Donec id metus vitae lacus placerat viverra.',
'Morbi congue urna quis convallis tincidunt.',
'Sed bibendum vitae mauris quis rhoncus.',
'Vivamus placerat feugiat dui.',
'Morbi commodo ligula sem, et laoreet felis varius commodo.',
'Nulla ac semper elit.',
'Nulla facilisi.',
'Duis bibendum sem sed eros semper, vel vestibulum nisi mattis.',
'Donec nec sem purus.',
'Interdum et malesuada fames ac ante ipsum primis in faucibus.',
'Vestibulum porta nisi convallis ultrices dictum.',
'Maecenas dictum sodales ante, ut euismod metus.',
'Nunc consequat, erat vitae consectetur eleifend, sem neque viverra massa, a consectetur turpis dui a mi.',
'Sed luctus tempor est, a consequat nulla sollicitudin id.',
'Phasellus tempus tristique augue quis pellentesque.',
'Nam ac magna vel leo rutrum lobortis.',
'Morbi commodo aliquet justo, id vulputate lorem aliquet vitae.',
'Duis blandit eleifend metus.',
'Nulla posuere suscipit nunc, sed pretium enim gravida in.',
'Pellentesque vel blandit dui.',
'Phasellus elementum pellentesque nunc at pulvinar.',
'Cras fringilla aliquam aliquam.',
'Proin et dui ac elit lobortis ultrices.',
'Nullam eu odio scelerisque, vehicula purus quis, dignissim turpis.',
'Mauris egestas lorem est, ut fermentum enim rhoncus a.',
'Sed mollis a turpis quis porttitor.',
'Morbi tincidunt quam eget malesuada aliquet.',
'Nam lectus turpis, posuere ut cursus suscipit, porttitor sit amet dolor.',
'Aenean at tempor risus.',
'Nunc ornare diam eu odio auctor, nec viverra justo porttitor.',
'Fusce at sodales leo.',
'Aenean dictum mollis est, in iaculis nisi fermentum nec.',
'Curabitur lobortis ultrices leo.',
'Suspendisse sit amet metus eget massa placerat cursus et quis sapien.'
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment