メンバーログイン

切り抜き塾 会員ページのログインフォームです。



false]);

if (isset($uploaded_file[‘url’])) {
$file_url = $uploaded_file[‘url’];
$file_name = pathinfo($file_url, PATHINFO_FILENAME);
echo “

✅ アップロード完了

“;

// 定数はどこかで定義されていることを前提とする
$api_key = RUNPOD_API_KEY;
$endpoint_id = RUNPOD_ENDPOINT_ID;
$runpod_api_url = “https://api.runpod.ai/v2/{$endpoint_id}/run”;

$body = json_encode([
“input” => [
“audio” => $file_url,
“model” => “large-v2”,
“transcription” => “srt”
]
]);

$response = wp_remote_post($runpod_api_url, [
‘headers’ => [
‘Content-Type’ => ‘application/json’,
‘Authorization’ => “Bearer {$api_key}”
],
‘body’ => $body
]);

if (!is_wp_error($response)) {
$result = json_decode(wp_remote_retrieve_body($response), true);
if (isset($result[‘id’])) {
$job_id = esc_js($result[‘id’]);
?>

🔄 文字起こし中です…


first_name . ” ” . $member->last_name) . ” 様”;
} else {
return “

⚠️ このページは会員専用です。ログインしてください。

“;
}

$upload_dir = wp_upload_dir();
$srt_dir = $upload_dir[‘basedir’] . ‘/srt/’ . $user_id . ‘/’;
$srt_url_base = $upload_dir[‘baseurl’] . ‘/srt/’ . $user_id . ‘/’;

if (!file_exists($srt_dir)) {
return “

{$display_name}、まだSRTファイルはありません。

“;
}

$files = glob($srt_dir . “*.srt”);
if (!$files) {
return “

{$display_name}、まだSRTファイルはありません。

“;
}

usort($files, function($a, $b) {
return filemtime($b) – filemtime($a);
});

$html = “

文字起こし履歴 (SRTファイル)

“;
$html .= “

👤 {$display_name}

“;
$html .= “

“;
$html .= “

“;

foreach ($files as $file) {
$filename = basename($file);
$date = date(“Y-m-d H:i”, filemtime($file));
$srt_url = $srt_url_base . $filename;

$html .= “

“;
}

$html .= “

日付 ファイル名 ダウンロード
{$date} {$filename} 📥 ダウンロード

“;
return $html;
}

// ========== マイページ用ショートコード ==========
add_shortcode(‘member_mypage’, ‘render_member_mypage’);

function render_member_mypage() {
if (class_exists(‘SwpmMemberUtils’) && SwpmMemberUtils::is_member_logged_in()) {
$user_id = SwpmMemberUtils::get_logged_in_members_id();
$member = SwpmMemberUtils::get_user_by_id($user_id);

$name = !empty($member->first_name) ? esc_html($member->first_name . ‘ ‘ . $member->last_name) : ‘会員’;
} else {
return “

⚠️ このページは会員専用です。ログインしてください。

“;
}

$upload_dir = wp_upload_dir();
$srt_dir = $upload_dir[‘basedir’] . ‘/srt/’ . $user_id . ‘/’;
$srt_url_base = $upload_dir[‘baseurl’] . ‘/srt/’ . $user_id . ‘/’;

$html = “

{$name} 様のマイページ

“;

// メニューリンク
// 【SRT完全統一】リンク先を /srt-history/ に変更
$html .= “

“;

// 最新3件履歴
$html .= “

📂 最新の文字起こし履歴 (SRT)

“;

if (file_exists($srt_dir)) {
$files = glob($srt_dir . “*.srt”);

if ($files) {
usort($files, function($a, $b) {
return filemtime($b) – filemtime($a);
});

$html .= “

“;
$html .= “

“;

$count = 0;
foreach ($files as $file) {
if ($count >= 3) break;
$filename = basename($file);
$date = date(“Y-m-d H:i”, filemtime($file));
$srt_url = $srt_url_base . $filename;

$html .= “

“;
$count++;
}
$html .= “

日付 ファイル名 ダウンロード
{$date} {$filename} 📥 ダウンロード

“;

// 【SRT完全統一】リンク先を /srt-history/ に変更
$html .= “

👉 履歴をもっと見る

“;
} else {
$html .= “

まだ文字起こし履歴はありません。

“;
}
} else {
$html .= “

まだ文字起こし履歴はありません。

“;
}

return $html;
}

// ========== 会員メニューショートコード ==========
function kirinuki_member_menu() {
if (class_exists(‘SwpmMemberUtils’) && SwpmMemberUtils::is_member_logged_in()) {
return ”

“;
}
return “”;
}
add_shortcode(‘kirinuki_member_menu’, ‘kirinuki_member_menu’);

// ========== SRT変換フォーム (そのまま維持) ==========
function srt_converter_form() {
ob_start(); ?>




(\d{2}:\d{2}:\d{2},\d{3})/’, $timestamp_line, $matches)) continue;

$start_ms = srt_to_ms($matches[1]);
$end_ms = srt_to_ms($matches[2]);

if ($end_ms <= $start_ms) continue; // 1. テキストの整形 (句読点・文字数で分割) $text = implode(' ', array_slice($lines, 2)); $text = preg_replace('/\s+/', '', $text); $segments_raw = preg_split('/([。、!?])/', $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); $current_line = ""; $formatted_segments = []; foreach ($segments_raw as $segment) { $current_line .= $segment; $is_punctuation_end = in_array(mb_substr($segment, -1, 1, 'UTF-8'), ['。', '、', '!', '?']); $is_too_long = mb_strlen($current_line, 'UTF-8') >= $max_chars;

if ($is_punctuation_end || $is_too_long) {
while(mb_strlen($current_line, ‘UTF-8’) > $max_chars) {
$part = mb_substr($current_line, 0, $max_chars, ‘UTF-8’);
$formatted_segments[] = trim($part);
$current_line = mb_substr($current_line, $max_chars, null, ‘UTF-8’);
}

if (!empty(trim($current_line))) {
$formatted_segments[] = trim($current_line);
$current_line = “”;
}
}
}
if (!empty(trim($current_line))) {
$formatted_segments[] = trim($current_line);
}

// 2. 時間の均等分割とSRTフォーマットへの出力
$split_count = count($formatted_segments);
$duration_ms = $end_ms – $start_ms;
$interval_ms = $split_count > 0 ? floor($duration_ms / $split_count) : 0;

for ($i = 0; $i < $split_count; $i++) { $new_start_ms = $start_ms + ($i * $interval_ms); $new_end_ms = ($i == $split_count - 1) ? $end_ms : $start_ms + (($i + 1) * $interval_ms); $new_start_time_srt = ms_to_srt_time($new_start_ms); $new_end_time_srt = ms_to_srt_time($new_end_ms); $final_output .= $sequence_number . PHP_EOL; $final_output .= $new_start_time_srt . ' --> ‘ . $new_end_time_srt . PHP_EOL;
$final_output .= $formatted_segments[$i] . PHP_EOL;
$final_output .= PHP_EOL;

$sequence_number++;
}
}

return $final_output;
}

パスワードを忘れた方はこちら