vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB5 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=263)
-   -   Excel 2 Forum (https://vborg.vbsupport.ru/showthread.php?t=327626)

Zweeper 10-31-2019 01:38 PM

Excel 2 Forum
 
Good day everybody,

I have an excel file with different rows and I want to create threads with content out of each row.
Is there already something like a phyton script available for this?

If not, can you give me some tipps and advice to start off how I could cope with something like this?
Maybe there is even a coder who could code something like this in python for me?

Greetings!

Dave 10-31-2019 01:52 PM

Is there a reason you want to use Python even though vBulletin 5 is created using PHP?

Using PHP you can read the Excel file and iterate through each row and then insert the thread.
PHP Code:

// Path to the vBulletin 5 folder. 
// '.' indicates current directory where the .htaccess file resides.
$vbpath '.';
define('CSRF_PROTECTION'false);
require_once(
$vbpath '/includes/vb5/autoloader.php');
vB5_Autoloader::register($vbpath);
vB5_Frontend_Application::init('config.php');

$api Api_InterfaceAbstract::instance();
$thread $api->callApi('content_text''add', [
    
'data' => [
        
'rawtext' => 'Content of the thread.',
        
'title' => 'Title of the thread.',
        
'parentid' => 3// ID of the forum section (or node as they call it in vBulletin 5)
        
'userid' => // ID of the user to post the thread as
    
],
    
'options' => [
        
'nl2br' => true
    
]
]);

var_dump($thread);

/*
Integer if created successfully, contains the thread id.
int(15)
Array if errors.
array(1) { [0]=> array(1) { [0]=> string(19) "humanverify_missing" } }
*/ 


Zweeper 10-31-2019 01:53 PM

no, just because I am more into python at the moment.
Thanks already for the script. But how can I tell it to get the data from my excel exactly? Is there an example? :(

--------------- Added [DATE]1572536085[/DATE] at [TIME]1572536085[/TIME] ---------------

The excel file is structured as


colum 1 = title
colum = thread content


there are x rows whereby each row should be a different thread.
I understand the code you wrote there, but I dont get how I can link this to an excel file.



Can you help me here?

--------------- Added [DATE]1572543745[/DATE] at [TIME]1572543745[/TIME] ---------------

It hasnt necessarly to be excel 2 vbulletin. Right now I just have all the data in an excel file.

Zweeper 11-02-2019 11:00 AM

I came a bit closer to the solution I guess, got some help from another guy regarding the importing problem from a csv file. But I can't get it working.


Anyone, any help here? :(






Code:

$row = 1;
if (($handle = fopen("yourdata.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($rowfields);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
...
$post_title = $rowfields[0];
$post_content = $rowfields[1];
...
// then you call the thread creator
PostCreator(...
}
fclose($handle);
}


function PostCreator($title, $content... ) {
...
// here you call the code to create the thread
// it's not real code, just to help you figure it out

$thread = $api->callApi('content_text', 'add', [
'data' => [
'rawtext' => $content,
'title' => $title,
'parentid' => 3, // ID of the forum section (or node as they call it in vBulletin 5)
'userid' => 1 // ID of the user to post the thread as
],
'options' => [
'nl2br' => true
]
]);

}


Dave 11-02-2019 11:40 AM

Something like:

PHP Code:

// Path to the vBulletin 5 folder. 
// '.' indicates current directory where the .htaccess file resides.
$vbpath '.';
define('CSRF_PROTECTION'false);
require_once(
$vbpath '/includes/vb5/autoloader.php');
vB5_Autoloader::register($vbpath);
vB5_Frontend_Application::init('config.php');
$api Api_InterfaceAbstract::instance();

$row 1;
if ((
$handle fopen('yourdata.csv''r')) !== FALSE) {
    while ((
$data fgetcsv($handle1000',')) !== FALSE) {
        
$num count($rowfields);
        echo 
'<p> ' $num ' fields in line ' $row ': <br /></p>';
        
$row++;
    
        
$post_title $rowfields[0];
        
$post_content $rowfields[1];
    
        
// then you call the thread creator
        
$thread $api->callApi('content_text''add', [
            
'data' => [
                
'rawtext' => $post_content,
                
'title' => $post_title,
                
'parentid' => 3// ID of the forum section (or node as they call it in vBulletin 5)
                
'userid' => // ID of the user to post the thread as
            
],
            
'options' => [
                
'nl2br' => true
            
]
        ]);

    }
    
fclose($handle);


You still need to modify the parentid and userid value.
Pretty sure the script you gave is not valid though because it calls the $rowfields variable which does not exist.

Zweeper 11-02-2019 12:08 PM

thanks, I finally got it working. Many thanks 2 you! :)

Zweeper 04-06-2020 05:28 AM

Hey Dave, the script works like a charm, thank you so much again for your help!

There just came up another question from my side. When I work with larg csv files (more than about 1000 lines) the script runs longer than the max. execution time allowed by my server. The most of the times I split the files into separate files, what works of course.

But is there a "simple" way to update the script so that it also works with large files without running into problems with the max. execution time?

Regards!

shka 04-06-2020 08:15 AM

Try

PHP Code:

        // then you call the thread creator
        
set_time_limit(30);
        
$thread $api->callApi('content_text''add', [ 


Zweeper 04-10-2020 07:08 AM

Seems to work, many thanks! :)

Zweeper 04-13-2020 09:15 AM

Ok it is working, but not for me, since I cant change the set_time_limit at more than 90 seconds.

I could split my csv file into several files and then create several scripts which I have to run each after another.

like:

import_n.php imports import_n.csv
n+1

Is there a way to automatically start import_2.php when import_1 is finished?


All times are GMT. The time now is 07:47 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02025 seconds
  • Memory Usage 1,761KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code_printable
  • (3)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete