Rabu, 25 Februari 2015

Aturan Baru Google Untuk Blogspot

Aturan Baru Google Untuk Blogspot - Bukan aturan ketat lagi yang akan diterapkan oleh Google untuk layanan yang banyak digunakan tersebut yaitu Blogspot (Blogger) tapi Google akan bersikap lebih keras lagi terhadap para pengguna Blogspot. Google membuat aturan baru untuk Blogspot yang mengandung konten porno dengan melakukan penghapusan langsung terhadap blog tersebut

Dari sumber yang saya dapatkan, aturan baru Google untuk Blogspot ini memang kurang keras karena blog yang berisi materi berupa konten seksual atau pornografi, apapun bentuknya, baik gambar ataupun video tidak langsung menghapus blog tersebut tapi akan dibuat tertutup atau berada dalam tampilan private mode. Dan aturan baru Google untuk Blogspot ini akan berlaku mulai tanggal 23 Maret. Dengan kata lain jika blog Anda berisi konten pornografi maka jika halaman blog tersebut diakses maka yang muncul adalah halaman seperti tampilan gambar berikut ini

Aturan Baru Google Untuk Blogspot

Dan mungkin halaman peringatan seperti tampilan berikut ini juga akan diganti:
Aturan Baru Google Untuk Blogspot

Dan aturan ini dipertegas dengan pernyataan Google yang menyatakan, tidak ada halaman blog yang dihapus namun halaman yang mengandung konten seksual tersebut tidak akan muncul dalam mesin pencarian Google atau mungkin untuk selanjutnya blog tersebut akan benar-benar dihapus setelah tanggal 23 Maret 2015 ini. Namun aturan ini tidak akan berlaku meskipun blog berisi konten skesual dengan catatan konten tersebut memiliki manfaat bagi para pengguna khususnya sebagai pembelajaran baik dalam bidang pendidikan, pengetahuan, seni ataupun dokumenter. Nah? Kalau masih ada kelonggaran seperti itu yang jelas pintar-pintar blogger dalam mensiasati konten blognya tersebut

Aturan baru Google untuk Blogspot ini juga sudah ada di halaman dashboarg blog
Aturan Baru Google Untuk Blogspot

Kalau menurut saya, Aturan Baru Google Untuk Blogspot ini memang diperlukan namun kalau secara keseluruhan jika blog yang mengandung konten seksual tanpa melihat secara langsung dari isi blog tersebut dan langsung melakukan penghapusan maka saya rasa itu juga kurang bijak. Saya yakin semua orang atau semua pengguna internet pernah membuka baik sengaja ataupun tidak blog yang mengandung konten seksual tersebut, baik dengan tujuan hanya sekedar melihat atau mempelajari. Jadi kalau boleh menyarankan untuk Google, lebih baik tetap menayangkan blog-blog yang mengnadung konten seksual tersebut dengan catatan jangan menempatkannya di halaman pertama sampai ke halaman 1 trilliun di pencarian Google atau tidak melakukan indeks terhadap kata kunci yang terpasang pada artikel blog yang mengandung unsur seksual tersebut. :) Sekedar saran toh Google lebih pintar dan bijak dari saya :) karena sebelum aturan ini dibuat, toh Google sudah membuat aturannya namun lebih dikembangkan untuk saat ini karena semakin banyaknya blog yang mengandung konten yang kurang mendidik tersebut

Rabu, 18 Februari 2015

Parser JSON untuk Blogger: Posting dan Halaman Statis

Berikut adalah generalisasi fungsi untuk mengubah data JSON posting dan halaman statis Blogger menjadi markup HTML sesuai dengan keinginan. Di sini Saya membagi fungsinya menjadi dua macam yaitu generatePostsData untuk menangani posting dan halaman dalam bentuk daftar dan generatePostData untuk menangani posting dan halaman dalam bentuk tunggal:

Bentuk Daftar

function generatePostsData(json) {

// Poor configuration settings, develop them yourself!
var config = {
containerID: 'result-container', // Container ID to show the generated data
avatarSize: 50, // Default avatar size
noThumbnail: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABGdBTUEAALGPC/xhBQAAAAZQTFRFOjo6JycnNkxyjQAAADZJREFUKM9j+A8DDFRnNTCAACP9WewPGNgfkMmiwN7GH0CGfCPdWZT5V/7/DwZyWeSHFa1SHQDDGF2E0US40gAAAABJRU5ErkJggg==',
text: {
anon: 'Anonymous',
untagged: 'Untagged',
monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
}
};

var html = "",
item = "",
w = window,
d = document,
feed = json.feed,
container = d.getElementById(config.containerID),
postTotal = +feed.openSearch$totalResults.$t, // The post/page feeds' total (all)
postStartIndex = +feed.openSearch$startIndex.$t, // The post/page feeds' start index
postPerPage = +feed.openSearch$itemsPerPage.$t, // The post/page feeds' max results per page or per feed request
blogID = /\:blog-?(\d+)(\.|$)/.exec(feed.id.$t) ? /\:blog-?(\d+)(\.|$)/.exec(feed.id.$t)[1] : false, // The blog ID
blogTitle = feed.title.$t, // The post/page feeds' title
blogTags = false, // The available post/page tags (all)
blogSubTitle = feed.subtitle.$t, // The post/page feeds' subtitle
blogAuthorName = feed.author[0].name ? feed.author[0].name.$t : config.text.anon, // The blog/post author name
blogAuthorAvatar = feed.author[0].gd$image.src.replace(/\/s\d+(\-c)?\//, '/s' + config.avatarSize + '-c/'), // The blog/post author profile avatar URL
blogGeneratorName = feed.generator.$t, // The blog generator name (Blogger)
blogGeneratorURL = feed.generator.uri; // The blog generator URL (http://www.blogger.com)

// Remove the leading `http://` or `https://` in blog/post author profile avatar URL
// blogAuthorAvatar = blogAuthorAvatar.replace(/^https?\:/, "");

// No container found
if (!container) {
alert('Container not found.');
return;
}

// Getting the blog tags
if (feed.category && feed.category.length) {
blogTags = [];
for (var h = 0, hen = feed.category.length; h < hen; ++h) {
blogTags.push(feed.category[h].term);
}
// Sort the blog tags alphabetically
blogTags = blogTags.sort();
}

// No posts/pages yet
if (!feed.entry || feed.entry.length === 0) {
container.innerHTML = '<p>No posts/pages yet.</p>';
return;
}

// Building the markup ...
html += '<h1>' + blogTitle + '</h1>';
html += '<h2>' + blogSubTitle + '</h2>';
html += '<p><b>Blog ID:</b> ' + blogID + '</p>';
html += '<p><b>Blog Tags:</b> ' + (blogTags !== false ? blogTags.join(', ') : config.text.untagged) + '</p>';
html += '<p><b>Blog Author Name:</b> ' + blogAuthorName + '</p>';
html += '<p><b>Blog Author Avatar URL:</b> ' + blogAuthorAvatar + '</p>';
html += '<p><b>Total Posts:</b> ' + postTotal + '</p>';
html += '<p><b>Posts Per Page:</b> ' + postPerPage + '</p>';
html += '<p><b>Posts Start Index:</b> ' + postStartIndex + '</p>';
html += '<hr>';
html += '<ol>';

var posts = feed.entry;

for (var i = 0, ien = posts.length; i < ien; ++i) {

var post = posts[i], // A single post/page object
postID = post.id.$t, // The post/page ID
postPublish = post.published.$t, // The post/page publishing time in ISO format
postUpdate = post.updated.$t, // The post/page updating time in ISO format
postDate = postPublish, // The post/page publishing time in human-readable format
postURL = false, // The post/page URL
postTags = false, // The post/page tags
postCommentTotal = post.thr$total ? +post.thr$total.$t : 0, // The post/page comments total
postCommentFeedURL = false, // The post/page comments feed URL
postThumbnail = post.media$thumbnail ? post.media$thumbnail.url : config.noThumbnail, // The post/page thumbnail
postAuthorName = post.author[0].name ? post.author[0].name.$t : config.text.anon, // The post/page author name
postAuthorURL = post.author[0].uri ? post.author[0].uri.$t : false, // The post/page author profile URL
postAuthorAvatar = post.author[0].gd$image.src.replace(/\/s\d+(\-c)?\//, '/s' + config.avatarSize + '-c/'), // The post/page author profile avatar URL
postTitle = post.title.$t, // The post/page title
postContent = post.content ? post.content.$t : post.summary.$t.replace(/<br *\/?>|[\s]+/gi, ' ').replace(/<.*?>|[<>]/g, ""), // The post/page content
postEditURL = false; // The post/page edit URL

// Generate human-readable post/page date format
var date = postDate.split('T')[0].split('-');
postDate = date[2] + ' ' + config.text.monthNames[(+date[1]) - 1] + ' ' + date[0];

// Remove the leading `http://` or `https://` in post/page thumbnail URL
// postThumbnail = postThumbnail.replace(/^https?\:/, "");

// Remove the leading `http://` or `https://` in post/page author profile avatar URL
// postAuthorAvatar = postAuthorAvatar.replace(/^https?\:/, "");

for (var j = 0, jen = post.link.length; j < jen; ++j) {
item = post.link[j];
if (item.rel == 'self') {
// Getting the original post/page ID
postID = item.href.split('/').pop();
// Getting the post/page edit URL
postEditURL = item.href.replace(/\/feeds\/(\d+)\/(post|page)s?\/(default|summary)\/(\d+)/, '/$2-edit.g?blogID=$1&$2ID=$4');
}
// Getting the post/page URL
if (item.rel == 'alternate') {
postURL = item.href;
}
// Getting the post/page comment feed URL
if (item.rel == 'replies' && item.type == 'application/atom+xml') {
postCommentFeedURL = item.href;
}
}

// Trying to get the external image URL from post/page content
if (post.content && postThumbnail == config.noThumbnail) {
var image = /<img +(.*?)src=(['"])([^'"]+?)(['"])(.*?) *\/?>/i.exec(post.content.$t);
postThumbnail = image && image[3] ? image[3] : config.noThumbnail;
}

// Getting the post/page tags
if (post.category && post.category.length) {
postTags = [];
for (var k = 0, ken = post.category.length; k < ken; ++k) {
postTags.push(post.category[k].term);
}
// Sort the post/page tags alphabetically
postTags = postTags.sort();
}

// Building the markup ...
html += '<li>';
html += '<p><b>ID:</b> ' + postID + '</p>';
html += '<p><b>Publish:</b> ' + postPublish + '</p>';
html += '<p><b>Update:</b> ' + postUpdate + '</p>';
html += '<p><b>Date:</b> ' + postDate + '</p>';
html += '<p><b>URL:</b> ' + postURL + '</p>';
html += '<p><b>Tags:</b> ' + (postTags !== false ? postTags.join(', ') : config.text.untagged) + '</p>';
html += '<p><b>Comment Total:</b> ' + postCommentTotal + '</p>';
html += '<p><b>Comment Feed URL:</b> ' + postCommentFeedURL + '</p>';
html += '<p><b>Thumbnail:</b> ' + postThumbnail + '</p>';
html += '<p><b>Author:</b> ' + postAuthorName + '</p>';
html += postAuthorURL !== false ? '<p><b>Author URL:</b> ' + postAuthorURL + '</p>' : "";
html += '<p><b>Author Avatar URL:</b> ' + postAuthorAvatar + '</p>';
html += '<p><b>Edit URL:</b> ' + postEditURL + '</p>';
html += '<p><b>Title:</b> ' + postTitle + '</p>';
html += '<p><b>Content:</b></p>';
html += '<div>' + postContent + '</div>';
html += '</li>';

}

// Building the markup ...
html += '</ol>';

// Show the generated data to the container ...
container.innerHTML = html;

}

Penggunaan

Urutannya dimulai dari penulisan HTML untuk menampung data yang akan digenerasikan oleh fungsi di atas, dilanjutkan dengan memasukkan fungsi di atas ke dalam tag <script>, lalu memanggil data JSON dengan menggunakan nilai parameter URL callback berupa generatePostsData, sesuai dengan nama fungsi di atas:

<div id="result-container">Loading&hellip;</div>
<script>
function generatePostsData(json) { … }
</script>
<script src="http://nama_blog.blogspot.com/feeds/posts/default?alt=json-in-script&orderby=published&callback=generatePostsData"></script>

Bentuk Tunggal

function generatePostData(json) {

// Poor configuration settings, develop them yourself!
var config = {
containerID: 'result-container', // Container ID to show the generated data
avatarSize: 50, // Default avatar size
noThumbnail: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABGdBTUEAALGPC/xhBQAAAAZQTFRFOjo6JycnNkxyjQAAADZJREFUKM9j+A8DDFRnNTCAACP9WewPGNgfkMmiwN7GH0CGfCPdWZT5V/7/DwZyWeSHFa1SHQDDGF2E0US40gAAAABJRU5ErkJggg==',
text: {
anon: 'Anonymous',
untagged: 'Untagged',
monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
}
};

var html = "",
item = "",
w = window,
d = document,
container = d.getElementById(config.containerID);

// No container found
if (!container) {
alert('Container not found.');
return;
}

var post = json.entry, // The post/page object
postID = post.id.$t, // The post/page ID
postPublish = post.published.$t, // The post/page publishing time in ISO format
postUpdate = post.updated.$t, // The post/page updating time in ISO format
postDate = postPublish, // The post/page publishing time in human-readable format
postURL = false, // The post/page URL
postTags = false, // The post/page tags
postCommentTotal = post.thr$total ? +post.thr$total.$t : 0, // The post/page comments total
postCommentFeedURL = false, // The post/page comments feed URL
postThumbnail = post.media$thumbnail ? post.media$thumbnail.url : config.noThumbnail, // The post/page thumbnail
postAuthorName = post.author[0].name ? post.author[0].name.$t : config.text.anon, // The post/page author name
postAuthorURL = post.author[0].uri ? post.author[0].uri.$t : false, // The post/page author profile URL
postAuthorAvatar = post.author[0].gd$image.src.replace(/\/s\d+(\-c)?\//, '/s' + config.avatarSize + '-c/'), // The post/page author profile avatar URL
postTitle = post.title.$t, // The post/page title
postContent = post.content ? post.content.$t : post.summary.$t.replace(/<br *\/?>|[\s]+/gi, ' ').replace(/<.*?>|[<>]/g, ""), // The post/page content
postEditURL = false; // The post/page edit URL

// Generate human-readable post/page date format
var date = postDate.split('T')[0].split('-');
postDate = date[2] + ' ' + config.text.monthNames[(+date[1]) - 1] + ' ' + date[0];

// Remove the leading `http://` or `https://` in post/page thumbnail URL
// postThumbnail = postThumbnail.replace(/^https?\:/, "");

// Remove the leading `http://` or `https://` in post/page author profile avatar URL
// postAuthorAvatar = postAuthorAvatar.replace(/^https?\:/, "");

for (var j = 0, jen = post.link.length; j < jen; ++j) {
item = post.link[j];
if (item.rel == 'self') {
// Getting the original post/page ID
postID = item.href.split('/').pop();
// Getting the post/page edit URL
postEditURL = item.href.replace(/\/feeds\/(\d+)\/(post|page)s?\/(default|summary)\/(\d+)/, '/$2-edit.g?blogID=$1&$2ID=$4');
}
// Getting the post/page URL
if (item.rel == 'alternate') {
postURL = item.href;
}
// Getting the post/page comment feed URL
if (item.rel == 'replies' && item.type == 'application/atom+xml') {
postCommentFeedURL = item.href;
}
}

// Trying to get the external image URL from post/page content
if (post.content && postThumbnail == config.noThumbnail) {
var image = /<img +(.*?)src=(['"])([^'"]+?)(['"])(.*?) *\/?>/i.exec(post.content.$t);
postThumbnail = image && image[3] ? image[3] : config.noThumbnail;
}

// Getting the post/page tags
if (post.category && post.category.length) {
postTags = [];
for (var k = 0, ken = post.category.length; k < ken; ++k) {
postTags.push(post.category[k].term);
}
// Sort the post/page tags alphabetically
postTags = postTags.sort();
}

// Building the markup ...
html += '<li>';
html += '<p><b>ID:</b> ' + postID + '</p>';
html += '<p><b>Publish:</b> ' + postPublish + '</p>';
html += '<p><b>Update:</b> ' + postUpdate + '</p>';
html += '<p><b>Date:</b> ' + postDate + '</p>';
html += '<p><b>URL:</b> ' + postURL + '</p>';
html += '<p><b>Tags:</b> ' + (postTags !== false ? postTags.join(', ') : config.text.untagged) + '</p>';
html += '<p><b>Comment Total:</b> ' + postCommentTotal + '</p>';
html += '<p><b>Comment Feed URL:</b> ' + postCommentFeedURL + '</p>';
html += '<p><b>Thumbnail:</b> ' + postThumbnail + '</p>';
html += '<p><b>Author:</b> ' + postAuthorName + '</p>';
html += postAuthorURL !== false ? '<p><b>Author URL:</b> ' + postAuthorURL + '</p>' : "";
html += '<p><b>Author Avatar URL:</b> ' + postAuthorAvatar + '</p>';
html += '<p><b>Edit URL:</b> ' + postEditURL + '</p>';
html += '<p><b>Title:</b> ' + postTitle + '</p>';
html += '<p><b>Content:</b></p>';
html += '<div>' + postContent + '</div>';
html += '</li>';

// Building the markup ...
html += '</ol>';

// Show the generated data to the container ...
container.innerHTML = html;

}

Penggunaan

Sisipkan ID posting/halaman statis setelah path default atau summary:

<div id="result-container">Loading&hellip;</div>
<script>
function generatePostData(json) { … }
</script>
<script src="http://nama_blog.blogspot.com/feeds/posts/default/1962799387619194999?alt=json-in-script&callback=generatePostData"></script>

Ekstra

Halaman Statis

Data halaman statis dapat dipanggil dengan menggunakan format URL seperti ini:

http://nama_blog.blogspot.com/feeds/pages/default?alt=json-in-script&orderby=published&callback=generatePostsData
http://nama_blog.blogspot.com/feeds/pages/default?alt=json-in-script&callback=generatePostData

Mode Ringkas

Mode ringkas dapat dipanggil dengan menggunakan format URL seperti ini:

http://nama_blog.blogspot.com/feeds/posts/summary?alt=json-in-script&orderby=published&callback=generatePostsData
http://nama_blog.blogspot.com/feeds/pages/summary?alt=json-in-script&orderby=published&callback=generatePostsData
http://nama_blog.blogspot.com/feeds/posts/summary?alt=json-in-script&callback=generatePostData
http://nama_blog.blogspot.com/feeds/pages/summary?alt=json-in-script&callback=generatePostData

Parser JSON untuk Blogger: Komentar

Berikut adalah generalisasi fungsi untuk mengubah data JSON komentar Blogger menjadi markup HTML sesuai dengan keinginan. Saya sudah mendefinisikan ulang data-data yang penting ke dalam variabel, sehingga Anda bisa memodifikasi skrip ini dengan lebih mudah:

Bentuk Daftar

function generateCommentsData(json) {

// Poor configuration settings, develop them yourself!
var config = {
containerID: 'result-container', // Container ID to show the generated data
avatarSize: 50, // Default avatar size
text: {
anon: 'Anonymous'
}
};

var html = "",
item = "",
w = window,
d = document,
feed = json.feed,
container = d.getElementById(config.containerID),
postCommentTotal = +feed.openSearch$totalResults.$t, // The comment feeds' total (all)
postCommentStartIndex = +feed.openSearch$startIndex.$t, // The comment feeds' start index
postCommentPerPage = +feed.openSearch$itemsPerPage.$t, // The comment feeds' max results per page or per feed request
blogID = /\:blog-?(\d+)(\.|$)/.exec(feed.id.$t) ? /\:blog-?(\d+)(\.|$)/.exec(feed.id.$t)[1] : false, // The blog ID
postID = /\.post-?(\d+)(\.|$)/.exec(feed.id.$t) ? /\.post-?(\d+)(\.|$)/.exec(feed.id.$t)[1] : false, // The current post ID (if any)
postURL = false, // The current post URL (if any)
blogTitle = feed.title.$t, // The comment feeds' title
blogAuthorName = feed.author[0].name ? feed.author[0].name.$t : config.text.anon, // The blog/post author name
blogAuthorAvatar = feed.author[0].gd$image.src.replace(/\/s\d+(\-c)?\//, '/s' + config.avatarSize + '-c/'), // The blog/post author profile avatar URL
blogGeneratorName = feed.generator.$t, // The blog generator name (Blogger)
blogGeneratorURL = feed.generator.uri; // The blog generator URL (http://www.blogger.com)

// Remove the leading `http://` or `https://` in blog/post author profile avatar URL
// blogAuthorAvatar = blogAuthorAvatar.replace(/^https?\:/, "");

// No container found
if (!container) {
alert('Container not found.');
return;
}

// Getting the current post URL (if any)
if (postID) {
for (var h = 0, hen = feed.link.length; h < hen; ++h) {
item = feed.link[h];
if (item.rel == 'alternate') {
postURL = item.href;
break;
}
}
}

// No comments yet
if (!feed.entry || feed.entry.length === 0) {
container.innerHTML = '<p>No comments yet.</p>';
return;
}

// Building the markup ...
html += '<h1>' + blogTitle + '</h1>';
html += '<p><b>Blog ID:</b> ' + blogID + '</p>';
html += '<p><b>Post ID:</b> ' + postID + '</p>';
html += '<p><b>Post URL:</b> ' + postURL + '</p>';
html += '<p><b>Blog Author Name:</b> ' + blogAuthorName + '</p>';
html += '<p><b>Blog Author Avatar URL:</b> ' + blogAuthorAvatar + '</p>';
html += '<p><b>Total Comments:</b> ' + postCommentTotal + '</p>';
html += '<p><b>Comments Per Page:</b> ' + postCommentPerPage + '</p>';
html += '<p><b>Comments Start Index:</b> ' + postCommentStartIndex + '</p>';
html += '<hr>';
html += '<ol>';

var comments = feed.entry;

for (var i = 0, ien = comments.length; i < ien; ++i) {

var comment = comments[i], // A single comment feed object
commentID = comment.id.$t, // The comment ID
commentPublish = comment.published.$t, // The comment publishing time in ISO format
commentUpdate = comment.updated.$t, // The comment updating time in ISO format
commentDate = commentPublish, // The comment publishing time in timestamp format you defined in the dashboard
commentAuthorName = comment.author[0].name ? comment.author[0].name.$t : config.text.anon, // The comment author name
commentAuthorURL = comment.author[0].uri ? comment.author[0].uri.$t : false, // The comment author profile URL
commentAuthorAvatar = comment.author[0].gd$image.src.replace(/\/s\d+(\-c)?\//, '/s' + config.avatarSize + '-c/'), // The comment author profile avatar URL
commentContent = comment.content ? comment.content.$t : comment.summary.$t.replace(/<br *\/?>|[\s]+/gi, ' ').replace(/<.*?>|[<>]/g, ""), // The comment content
commentParent = false, // The comment parent ID (if any, for child comments)
commentPermalink = false, // The comment permalink
commentIsAdmin = commentAuthorName === blogAuthorName || commentAuthorAvatar === blogAuthorAvatar, // Is this comment was created by the blog/post author?
commentDeleteURL = false; // The comment delete URL

// Remove the leading `http://` or `https://` in comment author profile avatar URL
// commentAuthorAvatar = commentAuthorAvatar.replace(/^https?\:/, "");

for (var j = 0, jen = comment.link.length; j < jen; ++j) {
item = comment.link[j];
if (item.rel == 'self') {
// Getting the original comment ID
commentID = item.href.split('/').pop();
// Getting the comment delete URL
commentDeleteURL = item.href.replace(/\/feeds\/(\d+)\/(\d+)\/comments?\/(default|summary)\/(\d+)/, '/delete-comment.g?blogID=$1&postID=$4');
}
// Getting the comment permalink URL
if (item.rel == 'alternate') {
commentPermalink = item.href;
}
// Getting the comment parent ID (if any)
if (item.rel == 'related') {
var parentID = item.href.split('/').pop();
commentParent = commentID !== parentID ? parentID : false;
}
}

// Getting the comment publishing time in timestamp format you defined in the dashboard
for (var k = 0, ken = comment.gd$extendedProperty.length; k < ken; ++k) {
item = comment.gd$extendedProperty[k];
if (item.name == 'blogger.displayTime') {
commentDate = item.value;
break;
}
}

// Building the markup ...
html += '<li>';
html += '<p><b>ID:</b> ' + commentID + '</p>';
html += '<p><b>Publish:</b> ' + commentPublish + '</p>';
html += '<p><b>Update:</b> ' + commentUpdate + '</p>';
html += '<p><b>Date:</b> ' + commentDate + '</p>';
html += '<p><b>Author:</b> ' + commentAuthorName + '</p>';
html += commentAuthorURL !== false ? '<p><b>URL:</b> ' + commentAuthorURL + '</p>' : "";
html += '<p><b>Avatar URL:</b> ' + commentAuthorAvatar + '</p>';
html += commentParent !== false ? '<p><b>Parent ID:</b> ' + commentParent + '</p>' : "";
html += '<p><b>Permalink:</b> ' + commentPermalink + '</p>';
html += '<p><b>Status:</b> ' + (commentIsAdmin ? 'admin' : 'guest') + '</p>';
html += '<p><b>Delete URL:</b> ' + commentDeleteURL + '</p>';
html += '<p><b>Message:</b></p>';
html += '<div>' + commentContent + '</div>';
html += '</li>';

}

// Building the markup ...
html += '</ol>';

// Show the generated data to the container ...
container.innerHTML = html;

}

Penggunaan

Urutannya dimulai dari penulisan HTML untuk menampung data yang akan digenerasikan oleh fungsi di atas, dilanjutkan dengan memasukkan fungsi di atas ke dalam tag <script>, lalu memanggil data JSON dengan menggunakan nilai parameter URL callback berupa generateCommentsData, sesuai dengan nama fungsi di atas:

<div id="result-container">Loading&hellip;</div>
<script>
function generateCommentsData(json) { … }
</script>
<script src="http://nama_blog.blogspot.com/feeds/comments/default?alt=json-in-script&reverse=false&orderby=published&callback=generateCommentsData"></script>

Ekstra

Memanggil Data Komentar untuk Posting Tertentu

Gunakan format URL seperti ini untuk membatasi pemanggilan data komentar hanya untuk komentar-komentar yang terdapat pada posting dengan ID 6427706034645358331:

http://nama_blog.blogspot.com/feeds/6427706034645358331/comments/default?alt=json-in-script&reverse=false&orderby=published&callback=generateCommentsData

Sayangnya Saya tidak berhasil menemukan referensi resmi mengenai JSON Blogger versi 1.0 di Google Developer. Dulu memang pernah ada tapi sekarang sudah tidak ada lagi. Yang ada sekarang lebih banyak ditujukan untuk API Blogger versi 3.0+ yang membutuhkan autentikasi.

Minggu, 15 Februari 2015

Mungkinkah Blogger Kontroversial Ini Meninggal?

Mungkinkah Blogger Kontroversial Ini Meninggal? - Ketika seorang blogger yang sudah disebut sebagai seorang Master of Blogger, baik itu sebagai blogger dalam memberikan tutorial tentang blog, tentang bisnis online, dan bahkan di cap sebagai blogger kontroversial karena apa yang diberikannya penuh dengan tanda tanya dan penasaran blogger lain, khususnya blogger pemula. Namun akhirnya menganggap blogger tersebut sebagai penipu karena cara kerja yang diberikan hanya lah sebuah trik dan intrik tipu muslihat belaka. Namun cap sebagai blogger kontroversial dan atau sebagai penipu di internet khususnya dalam bisnis online pun dimentahkan dengan beberapa testimoni-testimoni yang ada dalam setiap produknya. Bahkan cap sebagai blogger kontroversial tersebut semakin hilang dan tenggelam dengan pertumbuhan blog pribadinya yang memiliki trafik tinggi dengan komentar-komentar yang melebihi dari 200 komentar dari setiap artikel atau tulisan yang dia buat tentang strategi dalam berbisnis online

Bayangkan, Apa yang ada pikirkan jika mengalami dan memiliki 3 poin penting berikut ini didalam dunia internet:
  • Jika Anda memiliki beberapa produk dengan website penjualan khusus untuk tiap-tiap produk tersebut dan ternyata kesemua produk yang Anda jual memberikan profit yang sangat menguntungkan bagi Anda. Sehingga Anda pun memiliki banyak member yang tetap setia menanti produk Anda yang baru
  • Jika Anda memiliki sebuah blog personal yang secara khusus memberikan tips dan trik tentang apa yang Anda berikan atau anda sampaikan didalam ebook yang Anda jual ternyata memiliki respon yang sangat luar biasa dengan komentar-komentar rasa ingin tahu dengan jumlah komentar hingga ratusan komentar
  • Jika Anda memiliki sebuah blog yang ternyata sudah tidak ada update terbaru untuk artikel blog tersebut sehingga membuat banyak member atau pun pengunjung setia blog Anda menjadi bertanya-tanya, kemana Anda? Kenapa artikel blognya sudah tidak update lagi? Pun spekulasi negatif banyak bermunculan, apakah Anda membuat produk baru atau Anda sudah meninggal?

Kenapa saya menyebut poin diatas sebagai 3 poin penting? Karena jika Anda seorang blogger sekaligus internet marketing, maka Anda harus menjaga kredibilitas website penjualan Anda dan jangan membiarkan website tersebut Mati Suri alias tidak aktif, karena didalam website penjualan Anda tersebut terdapat banyak member dan sampai kapan pun Anda harus melakukan update terhadap produk yang Anda jual agar member Anda tidak merasa dirugikan sehingga mengganggap Anda sebagai penipu. Sampai kapan pun website Anda harus bertahan, kalau pun produk Anda sudah usang, seharusnya Anda melakukan update dan mengganti dengan produk yang baru yang mengikuti perkembangan bisnis online. Anda tidak akan pernah dirugikan jika melakukan update produk yang Anda jual, sekalipun ada member lama disana karena dari member lama itulah member baru akan Anda dapatkan

Selain website yang harus di update baik isi dan tampilannya, maka sebagai seorang blogger dan internet marketing, Anda juga harus memiliki sebuah blog personal dan memberikan perlakukan yang sama dengan blog penjualan Anda yaitu jangan sampai blog personal Anda Mati Suri. Kalau tidak, banyak blogger khususnya member Anda yang akan bertanya-tanya, kemanakah gerangan pemiliki blog ini?

Dari uraian diatas, artikel ini saya tujukan khusus untuk seorang blogger yang sekaligus sebagai internet marketing yang semasa jaya dulu, blogger ini sangat kontroversial dengan berbagai produk yang dijualnya karena dari satu produk bisa menghasilkan ratusan juta rupiah! Sedangkan produk-produk yang dijualnya berjumlah lebih dari 5 produk! Dan uniknya lagi, setiap produk baru yang dijualnya selalu mendapatkan respon yang sangat baik, produk tersebut laris manis! Padahal produk yang dijualnya hanyalah berupa ebook yang tentunya hanyalah berisi tulisan didalamnya. Namun sayang, dibalik kesuksesannya ini datanglah malapetaka yang menghampirinya yaitu disematkannya kata "Penipu" terhadap dirinya! Siapakah dia? Joko Susilo! Ya Joko Susilo adalah blogger kontroversial yang hampir semua blogger mengetahuinya, baik blog yang dimilikinya maupun website penjualannya

Mungkinkah Blogger Kontroversial Ini Meninggal

Kenapa Joko Susilo disebut-sebut sebagai blogger kontroversial? Bahkan disebut-sebut sebagai penipu dalam bisnis online dengan produk yang dijualnya? Entah lah, dari beberapa sumber yang saya baca, Joko Susilo disebut penipu karena apa yang dijualnya hanyalah sebuah ebook yang tidak ada manfaatnya sama sekali, namun sebagian yang lain menyebutnya kalau produk yang dijual Joko Susilo sangat bermanfaat bahkan yang setuju dengan jualan produk yang dipasarkan Joko Susilo melalui website penjualannya banyak yang membaca artikel-artikel penting yang ditulis oleh Joko Susilo di blog pribadinya. Nah dari sinilah saya dapat menyimpulkan apa yang terjadi dengan Joko Susilo dan bisnis onlinenya tersebut. Seperti yang saya uraikan diatas, pada tahun 2008 sampai dengan kurang lebih 2012 kemungkinan besar produk Joko Susilo yang berupa ebook tersebut masih di cari dan dibutuhkan oleh banyak orang karena pada zaman itu saya beranggapan kalau bisnis online pada saat itu masih terlihat konvensional, masih monoton, masih tradisional yang hanya terpaku pada satu orang pelaku, satu pemilik bisnis online dan satu produk yaitu Joko Susilo, sehingga banyak orang atau blogger yang berbondong-bondong datang ke blognya Joko Susilo atau ke Google dan mengetikkan kata kunci "produk bisnis joko susilo" sehingga mereka menjadi member Joko Susilo

Namun seiring perkembangan teknologi informasi dan bisnis online yang beredar, muncul lah berbagai macam jenis dan bentuk produk dan bisnis online, semakin banyaknya pemilik produk dan semakin banyak website penjualan membuat posisi Joko Susilo dan produknya goyah. Produk Joko Susilo yang berupa ebook pun mulai dicari titik kelemahannya, kenapa ebook seperti itu banyak yang membeli? Apa yang dibaca oleh pembeli ebook tersebut? Rasa penasaran dan perbandingan antar produk ini lah yang besar kemungkinan membuat Joko Susilo dan produknya terpojok dan disebut sebagai pebisnis online kontroversial dan disebut sebagai penipu dalam bisnis online. Bukan hanya itu, kemungkinan besar produk yang dimiliki oleh Joko Susilo tidak mengikuti perkembangan zaman pada saat ini, dimana seorang blogger tidak perlu membaca ebook tapi sebuah praktek langsung yang bisa diterapkan untuk mendapatkan profit di internet. Untuk itu, seharusnya Joko Susilo bisa melakukan manejemen blog bukan hanya sekedar menejemen produk dan keuangan

Jika Anda merasa ditipu oleh Joko Susilo, seharusnya Anda bisa mencermati kalimat ini "Ebook ini berhasil merubah hidup saya dan seharusnya juga bisa merubah hidup anda". Sebuah kalimat yang rata-rata hampir ada pada setiap produk yang dijual oleh pebisnis online lainnya

Lantas apa kamsudnya judul artike "Mungkinkah Blogger Kontroversial Ini Meninggal?" ini? Saya tidak beranggapan Joko Susilo meninggal dunia namun judul artikel ini hanyalah sebuah judul saja. Saya menulis jdul seperti itu, bukannya saya sebagai member dari Joko Susilo namun sebagai seorang blogger, saya juga banyak belajar dari Blognya Joko Susilo yang berisi dengan artikel-artikel terbaik tentang tips dan trik dalam menjalankan bisnis online. Dan Artikel ini saya buat, karena blognya Joko Susilo sudah hampir 1 tahun tidak melakukan update eperti yang terlihat pada gambar berikut ini:

Joko Susilo Meninggal

Dari potongan gambar diatas terlihat kalau Joko Susilo terakhir menulis artikel untuk blognya pada tanggal 20 April 2014 dan artikel blog ini saya buat pada tanggal 16 Februari 2015. Berapa lama blog Joko Susilo itu tidak update? Hampir satu tahun...

Jadi jika seorang blogger apalagi sudah menjadi master dalam dunia blog, maka setidaknya sebagai seorang blogger juga kita harus mencari tahu, apa yang terjadi dengan blogger tersebut jika sudah tidak melakukan update blog selama itu? Selain tidak melakukan update pada blog, beberapa web penjualan yang dimiliki oleh Joko Suilo ada yang tidak aktif. Apa yang terjadi dengan Joko Susilo? Mungkinkah Blogger Kontroversial Ini Meninggal?

Selasa, 10 Februari 2015

LICEcap Membuat Screen Capture Gambar Artikel Bergerak

LICEcap Membuat Screen Capture Gambar Artikel Bergerak - Artikel ini diluar kategori yang ada didalam blog ini, artikel ini saya buat karena banyaknya email dan sms yang masuk yang menanyakan tentang gambar bergerak yang saya pasang beberapa hari terakhir untuk artikel blog ini. Salah satu contoh gambar artikel bergerak seperti yang terlihat pada gambar dibawah ini. Gambar seperti itulah yang banyak ditanyakan teman-teman blogger ke saya. Gambar bergerak tersebut merupakan gambar dari hasil screen capture yang diambil langsung dari layar monitor laptop dan tentunya untuk mengambil screen capture bergerak tersebut memerlukan aplikasi

LICEcap Membuat Screen Capture Gambar Bergerak

Aplikasi yang digunakan untuk membuat screen capture bergerak tersebut adalah LICEcap yang bisa digunakan secara gratis. Aplikasi ini saya temukan waktu saya berkunjung ke blognya mas +Adhy Suryadi pemilik blog KompiAjaib. Jika Anda berkunjung ke blognya mas Adhy maka hampir semua gambar artikel di blog tersebut bergerak alias memiliki animasi sesuai dengan tangkapan layar yang ada. Saya tidak menanyakan ke mas Adhy cara membuat gambar artikel bergerak tersebut, tapi saya menemukan rahasianya saat ada seorang blogger yang menanyakan tentang gambar animasi tersebut melalui komentar blog disana. Dalam komentar tersebut, mas Adhy langsung menjawabnya kalau menggunakan LICEcap untuk membuat gambar bergerak seperti contoh berikut ini

LICEcap Membuat Screen Capture Gambar Artikel Bergerak

Apa itu LICEcap? LICEcap adalah sebuah aplikasi yang digunakan untuk membuat screen capture gambar artikel bergerak. Tidak seperti aplikasi lainnya, misal PrntScrn yang hanya sekedar melakukan screen capture atau menangkap tampilan layar tanpa adanya animasi. Namun begitu setiap aplikasi tersebut memiliki kelebihan dan kekurangan. Jika menggunakan Prnt Scrn, kita bisa menambahkan warna dan jika menggunakan LICEcap secara berlebihan maka ukuran fila yang dihasilkan sangat besar dan sangat tidak dianjurkan merekam tampilan layar menggunakan LICEcap, lebih baik menggunakan aplikasi seperti camtasia. Jika Anda tertarik untuk menggunakan LICEcap ini, silahkan download filenya...


Menurut pengembangnya, LICEcap memiliki beberapa fitur berikut ini:
  • Record directly to .GIF or .LCF.
  • Move the screen capture frame while recording.
  • Pause and restart recording, with optional inserted text messages.
  • Global hotkey (shift+space) to toggle pausing while recording
  • Adjustable maximum recording framerate, to allow throttling CPU usage.
  • Basic title frame, with or without text.
  • Record mouse button presses.
  • Display elapsed time in the recording.

Dan penggunaannya kompatibel untuk:
  • Windows XP/Vista/7/8/8.1 (might work with reduced functionality on other versions)
  • OSX: OS 10.4+ (10.6+ for full feature support), PPC or Intel (note: OS X support is still preliminary, some features are not supported)
  • A reasonably fast CPU
  • A healthy amount of RAM (1GB+, especially when encoding to LCF)

Jadi dengan menggunakan LICEcap, membuat screen capture gambar artikel bergerak jadi lebih mudah dan hasilnya sangat menarik, seperti layaknya tampilan sebuah video

Kamis, 05 Februari 2015

Cara Mendapatkan Kupon Google AdWords Gratis

Cara Mendapatkan Kupon Google AdWords Gratis - Siapa yang mau mendapatkan kupon gratis dari Google AdWords? Ternyata mudah loh dan tidak perlu mendapatkan email penawaran dari Google yang pernah saya bahas pada artikel sebelumnya. Namun ada satu syarat yang harus diketahui sebelum menggunakan kupon Google AdWords tersebut. Apa syaratnya? Silahkan baca dulu artikel tentang Penawaran pasang iklan di Google AdWords

Cara Mendapatkan Kupon Google AdWords Gratis

Sebelum melanjutkan tentang cara mendapatkan kupon Google AdWords secara gratis, sedikit saya jelaskan terlebih dahulu mengenani Google AdWords itu sendiri. Menurut Wikipedia, Google AdWords adalah sebuah produk periklanan yang dibuat oleh Google yang sampai saat ini masih menjadi sumber pemasukan utama Google di bidang periklanan. Google AdWords adalah sebuah strategi pemasaran periklanan baru yang menggunakan mesin pencarian Google sebagai saran beriklan, biasa disebut juga sebagai Search Engine Marketing atau pemasaran berbasis mesin pencari. Selain itu, iklan juga akan ditampilkan pada blog atau website yang menjadi publisher dari Google AdSense

Berikut salah satu contoh tampilan iklan yang ada di Google AdWords yang tampil di search engine. Pada tampilan berikut ini, saya menggunakan satu kata kunci yaitu "travel" dan hasilnya seperti berikut

Cara Mendapatkan Kupon Google AdWords Gratis

Perhatikan gambar diatas, dari kata kunci yang saya gunakan ternyata ada jutaan kata kunci "travel" (3.420.000.000 kata kunci) dan hanya dua website yang diutamakan tampil di nomer satu halaman pencarian Google yaitu website Traveloka dan TheFriendshipforce. Kenapa kedua website ini bisa tampil di nomer satu dan dua? Karena mereka adalah sebagai advertiser di Google AdWords. Sehingga Google lebih memperioritaskan mereka untuk tampil di halaman pertama dan nomer satu. Selain itu, kedua website tersebut bisa tampil karena kata kunci yang saya gunakan. Jadi dengan menggunakan Google AdWords sebagai media promosi dan tampil dihalaman pertama Google, coba bayangkan apa yang terjadi? Trafik blog akan meningkat dan jika blog atau website tersebut berbasis bisnis, maka kemungkinan besar penjualan akan terjadi dan profit pun didapat.. Itulah cerita sederhana dari Google Adwords, selebihnya bisa Anda cari sendiri di search engine..

Dan untuk mendapatkan kupon gratis dari Google AdWords, silahkan klik tombol berikut ini


Selanjutnya akan tampil halaman seperti berikut ini

Cara Mendapatkan Kupon Google AdWords Gratis

Silahkan masukkan email Anda yang saya tandai dengan kotak merah pada gambar diatas. Namun perlu diingat, sebelumnya saya sudah memberitahukan kalau ada satu syarat yang perlu diperhatikan yaitu email. Jangan menggunakan email yang sudah pernah digunakan untuk Google AdWords karena jika email yang sudah pernah digunakan maka tidak akan bisa menggunakan kupon Google AdWords yang sudah didapat

Setelah mengisi email pada kolom yang telah disediakan, silah klik tombol Give me my code, dan hasilnya Anda akan langsung mendapatkan kupon Google AdWords seperti berikut tampilan ini

Cara Mendapatkan Kupon Google AdWords Gratis

Mudah bukan cara mendapatkan kupon Google AdWords secara gratis? Tak perlu menunggu email dari Google, menggunakan cara yang telah saya jelaskan diatas sudah cukup dan kupon langsung bisa digunakan. Silahkan klik tombol Start advertising now.. Selanjutnya, silahkan selesaikan sendiri.. heheee

Rabu, 04 Februari 2015

Dapat Email, Pasang Iklan Di Google AdWords Gratis

Dapat Email, Pasang Iklan Di Google AdWords Gratis - Kata emak saya, kalau rezeki itu memang tidak akan pergi kemana dan benar, sudah kedua kalinya ini saya mendapatkan email dari penawaran dari Google. Email tersebut berisi rayuan agar saya memasang iklan di Google AdWords dan email kedua ini saya terima 3 hari yang lalu. Yang menjadi pertanyaan saya adalah, kenapa Google masih merayu saya untuk memasang iklan di Google AdWords padahal tawaran dari email pertama tidak saya respon balik alias saya tidak menggunakan kupon iklan penawaran dari AdWords tersebut dan jika saya menggunakan kupon tersebut, saya bisa pasang iklan di Google AdWords secara gratis

Pasang Iklan Di Google AdWords Gratis

Untuk mendapatkan kupon dari Google AdWords, silahkan klik tombol berikut ini:

Kenapa saya tidak menggunakan kupon iklan Google Adwords tersebut? Mungkin pada email penawaran yang pertama saya enggan menggunakannya. Dan mungkin juga pada penawaran kedua ini saya masih enggan menggunakannya tapi akan saya coba juga, siapa tahu iklan saya langsung di terima oleh Google AdWords dan terpasang disemua blogger yang telah menjadi publisher AdSense. Karena yang saya tahu untuk memasang iklan di Google AdWords juga tidak langsung ditayangkan meskipun sudah terdaftar sebagai advertiser di AdWords, hal ini sesuai pengalaman saya waktu menjadi menjadi advertiser di Sitti, waktu itu saya menanyangkan iklan menggunakan Sitti dan masih tunggu 2 - 3 hari iklan bisa tampil karena beberapa pertimbangan seperti konten blog, apakah konten blog layak dan sesuai untuk ditayangkan atau tidak. Nah sekelas Sitti saja masih lumayan ketat, apalagi di Google AdWords.. coba di pikir... heheee

Nah email penawaran yang di kirim oleh Google tersebut memang ada sebuah kupon yang bisa digunakan agar bisa memasang iklan gratis di Google AdWords (lihat pada bagian gambar yang tercoret). Namun didalam email tersebut juga tidak memberikan informasi kapan batas penawaran tersebut bisa digunakan atau kapan batas kupon dari iklan tersebut?

Jika ada teman-teman blogger ada yang pernah menerima email penawaran untuk pasang iklan di Google AdWords secara gratis, tolong untuk infonya dibagikan melalui komentar blog ini. Info yang saya butuhkan, bagaimana cara menggunakan kupon iklan Google AdWords tersebut dan berapa lama batas penawaran tersebut berlaku. Terimakasih sebelumnya