I'm working on a Hubspot Api and trying to fetch all blog posts through api, but the api limit is only 20 post each time and i need to get 1960 blog posts. So how i supposed to do that?
Is there any way to do this with ajax or java script or through a loop that increase limit every time
Here is my code:
<?php
include 'wp-load.php';
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
require_once(ABSPATH . "wp-admin" . '/includes/taxonomy.php');
$apiKey = "9****966-***************";
$getArgs = array('timeout' => 120);
// Grab all blog posts . '&archived=false&offset=0&limit=300' total=1906
$response = wp_remote_get('https://api.hubapi.com/content/api/v2/blog-posts?hapikey=' . $apiKey . '&archived=false&limit=1960&offset=0', $getArgs);
$output = json_decode(wp_remote_retrieve_body($response), true);
$results = $output['objects'];
foreach ($results as $item) {
$postStatus = 'publish';
if ($item['blog_author']['email'] !== '') {
$user = get_user_by('email', $item['blog_author']['email']);
if ($user == false) {
$user = wp_insert_user(array(
'user_login' => $item['blog_author']['email'],
'user_email' => $item['blog_author']['email'],
'first_name' => $item['blog_author']['full_name'],
'user_pass' => substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),
0, 10),
));
$user = get_user_by('id', $user);
}
} else {
$user = wp_get_current_user();
}
if ($item['state'] == 'DRAFT') {
$postStatus = 'draft';
} elseif ($item['state'] == 'SCHEDULED') {
$postStatus = 'future';
}
$categories = $item['topic_ids'];
$args = array(
'posts_per_page' => 1,
'post_type' => 'post',
'meta_key' => 'hubspot_id',
'meta_value' => $item['id'],
'meta_compare' => '='
);
$exists = new WP_Query($args);
if ($exists->post_count == 0) {
$post_id = wp_insert_post(array(
'post_title' => $item['name'],
'post_content' => $item['post_body'],
'post_status' => $postStatus,
//'post_category' => $categories,
'post_type' => 'post',
'post_date' => date('Y-m-d H:i:s', $item['publish_date'] / 1000),
'post_author' => $user->ID
));
} else {
while ($exists->have_posts()) {
$exists->the_post();
$post_id = wp_update_post(array(
'ID' => get_the_ID(),
'post_title' => $item['name'],
'post_content' => $item['post_body'],
'post_status' => $postStatus,
//'post_category' => $categories,
'post_type' => 'post',
'post_date' => date('Y-m-d H:i:s', $item['publish_date'] / 1000),
'post_author' => $user->ID
));
}
wp_reset_postdata();
}
if (!empty($post_id) && !is_null($post_id)) {
$image_url = $item['featured_image'];
if ($image_url !== '' && isset($image_url)) {
$imageAltText = $item['featured_image_alt_text'];
$temp_file = download_url($image_url);
$file = array(
'name' => basename($image_url), // ex: wp-header-logo.png
'type' => wp_check_filetype($temp_file, null)['type'],
'tmp_name' => $temp_file,
'error' => 0,
'size' => filesize($temp_file),
);
$overrides = [
'test_form' => false,
'test_size' => true,
];
$results = wp_handle_sideload($file, $overrides);
if (empty($results['error'])) {
$filename = $results['file']; // Full path to the file
$local_url = $results['url']; // URL to the file in the uploads dir
$type = $results['type']; // MIME type of the file
// Set attachment data
$attachment = [
'post_mime_type' => $type,
'post_title' => sanitize_file_name($imageAltText),
'post_content' => '',
'post_status' => 'inherit'
];
// Create the attachment
$attach_id = wp_insert_attachment($attachment, $filename, $post_id);
if (has_post_thumbnail($post_id)) {
$oldthumbnail = get_post_thumbnail_id($post_id);
wp_delete_attachment($oldthumbnail, true);
}
// Define attachment metadata
$attach_data = wp_generate_attachment_metadata($attach_id, $filename);
// Assign metadata to attachment
wp_update_attachment_metadata($attach_id, $attach_data);
// And finally assign featured image to post
set_post_thumbnail($post_id, $attach_id);
}
}
if (!add_post_meta($post_id, 'hubspot_id', $item['id'], true)) {
update_post_meta($post_id, 'hubspot_id', $item['id']);
}
wp_reset_postdata();
}
$topicIds = $item['topic_ids'];
$getArgs = array('timeout' => 120);
$topics = [];
foreach ($topicIds as $topicId) {
$response = wp_remote_get('https://api.hubapi.com/blogs/v3/topics/' . $topicId . '?hapikey=9****966-***************', $getArgs);
$topics[] = json_decode(wp_remote_retrieve_body($response), true);
foreach ($topics as $topic) {
$catarr = array(
'cat_name' => $topic['name'],
'category_description' => $topic['description'],
'category_nicename' => $topic['slug'],
'taxonomy' => 'category'
);
$category_id = wp_insert_category($catarr);
wp_set_post_terms($post_id, $category_id, "category", true);
$default_category = (int)get_option('default_category');
if (in_category($default_category, $post_id)) {
// get list of all the post categories
$post_categories = get_the_category($post_id);
// count the total of the categories
$total_categories = count($post_categories);
// check if the post is in more than 1 category (the default one and more..)
if ($total_categories > 1) {
// remove the default category from the post
wp_remove_object_terms($post_id, $default_category, 'category');
}
}
}
}
}
?>
posts_per_page
option and theoffset
parameter? Pagination Codex and WPSE Questionuncategorized
so i need to call only 20 post each time but how i suppose to part all posts in chunks so after every time only 20 posts will insert and then the offset will change automatically thats i cant figure out how to code it.