Action unknown: backlinkmenuitem

آرشیو دات اورگ

شرح مسئله

در گذشته آرشیو متد بسیار ساده‌ای برای آپلود فایلها از طریق ftp داشت که نیازی به داشتن دانش نوشتن فایل‌های xml و … نداشت زیرا به این صورت بود که اطلاعات صفحه را از طریق فرم‌های وب سایت آرشیو وارد می‌کردید و بعد از ساخته شدن صفحهٔ آن در سایت آرشیو، یک url در اختیارتان می‌گذاشت که از طریق آن در ftp می‌توانستید فایل‌ها را آپلود کنید. ولی بعدها این قابلیت را برداشتند و از کاربرها خواستند که حتما از فرم آپلود وبشان استفاده کنند درصورتیکه به خاطر سرعت آپلود کم و دلایل مشابه دیگر اینکار بعضا با دشواری روبرو است و برخی از کاربران سایت آرشیو ترجیح می‌دهند که فایل را مستقیما از روی سرورشان (که معمولا پهنای باند بیشتری دارد) و از طریق محیط متنی، منتقل کنند.

راه‌حل

برای این منظور ابتدا از مرورگر lynx که در محیط متنی قابل اجرا است سعی کردم استفاده کنم ولی متوجه شدم که متاسفانه سایت آرشیو آپشن فرم آپلود سادهٔ html only خود که فاقد javascript بود را حذف کرده و lynx هم قابلیت اجرای javascriptها را ندارد و برای همین از این روش هم نمی‌شد برای آپلود فایل‌ها استفاده کرد. اما بالاخره متوجه شدم که آرشیو سرور ftp خود را هنوز قطع نکرده و برای همین با وجود اینکه در انجمن‌های رسمی، تیم ساپورت آرشیو همواره به کاربران توصیه می‌کند که از طریق وب فایل‌هایشان را آپلود کنند، هنوز هم یک روش جایگزین از طریق ftp برای آپلود فایل‌ها وجود دارد و تفاوت اصلی آن با روش سابق اینست که xml صفحه را به صورت دستی می‌نویسیم. در ادامه به توضیح این روش پرداخته‌ام:

برای آرشیو دات اورگ ابتدا یک نرم‌افزار کلاینت ftp نصب کنید. در اینجا من از برنامهٔ ncftp استفاده می‌کنم چون در محیط متنی هم قابل اجراست. سپس با دستور زیر به سرور آرشیو وصل شوید. (یوزرنیم همان ایمیل شماست که با آن در سایت آرشیو ثبت‌نام کردید.)

ncftp -u [username] -p [password] items-uploads.archive.org

در این مثال من فرض می‌کنم شما می‌خواهید یک فایل با نام InTheNameOfGod.mp4 را در سایت آرشیو آپلود کنید و url آن هم قرار است به صورت archive.org/details/InTheNameOfGod باشد. دقت کنید فرمت نامگذاری فایل و صفحه‌ای که قرار است درست شود باید مطابق فرمت نامگذاری سایت آرشیو یعنی به صورت CamelCase باشد. حالا روی سرور ftp یک دایرکتوری با نامی که انتخاب کردید، درست کنید.

mkdir InTheNameOfGod
cd InTheNameOfGod

حالا ۲ تا فایل باید روی سرور خودتان داشته باشید. برای مثال در اینجا فرض می‌کنیم که نام فایلی که می‌خواهید روی آرشیو آپلود کنید InTheNameOfGod.mp4 است. در اینصورت باید یک فایل دیگر با نام InTheNameOfGod_meta.xml ایجاد کنید و این فایل‌ها را به دایرکتوری ایجاد شده روی سرور آرشیو منتقل کنید:

put InTheNameOfGod.mp4
put InTheNameOfGod_meta.xml

محتوای فایل ایکس‌ام‌الی که باید ایجاد کنید چنین فرمتی دارد (اطلاعات بین تگ‌ها از جمله کیوردها و …. را ادیت کنید):

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<identifier>InTheNameOfGod</identifier>
<uploader>[email protected]</uploader>
<addeddate>2015-12-31 23:59:59</addeddate>
<title>InThe Name Of God - Software Freedom Day in Tehran</title>
<description>InThe Name Of God
 Write some description for uploaded video to show in archive.org detail page. Mention that every space or new line in this description will be shown in archive.org detail page.
 </description>
 <subject>Software Freedom Day; Free Software; Free Knowledge Foundation; Software Freedom; Free Software Philosophy</subject>
 <creator>Free Knowledge Foundation</creator>
 <mediatype>movies</mediatype>
 <collection>opensource_movies</collection>
 <sound>sound</sound>
 <color>color</color>
 <language>Persian</language>
 <publicdate>2015-12-31 23:59:59</publicdate>
</metadata>

بعد از انتقال فایل‌ها به سرور باید url زیر را در مرورگرتان باز کنید تا یک request به سرور آرشیو ارسال شود و طبق اطلاعات درون فایل xmlای که شما ساخته بودید صفحه مربوطه را بسازد و فایل آپلود شده را به محل درستش منتقل کند:

http://archive.org/services/contrib-submit.php?user_email=[email_address]&dir=InTheNameOfGod

بعد از باز کردن url بالا مشاهده خواهید کرد که دایرکتوری InTheNameOfGod دیگر در ftp شما موجود نیست. زیرا archive آن را به سرورهای خود منتقل کرده و صفحهٔ آن را ساخته. الان اگر صفحهٔ ایجاد شده را باز کنید تمام اطلاعات را در آن مشاهده می‌کنید ولی فایل آپلود شده را داخل آن نمی‌بینید. در صورتیکه عملیات موفقیت آمیز باشد وقتی لینک بالا را باز کنید این پیغام را دریافت می‌کنید:

<result type="success">
<message>
Queued for format conversion and move to download server.
</message>
<url>//archive.org/details/InTheNameOfGod</url>
</result>

برای نمایش این فایل به بخش ویرایش information یا metadata صفحه‌ای که فایل را در آن آپلود کردید، بروید و یک ویرایش جزئی انجام دهید تا لینک فایلی که آپلود کردید به نمایش دربیاید. دقت کنید renderها و نسخه‌های دیگر فایل آپلود شده و فایل تورنت آن و … به زودی ایجاد خواهند شد و در همین صفحهٔ فایلتان قرار خواهند گرفت.

یوتیوب

شرح مسئله

در مورد یوتیوب هم در میلینگ‌لیست‌ها و انجمن‌ها مسئولین بخش ساپورت یوتیوب گفته بودند که از رابط وب ما برای آپلود استفاده کنید و تمام راهنمایی‌ها در مورد اینکه چگونه فایل را می‌شود از روی سرور مستقیما آپلود کرد به google api console ختم می‌شد که هم کار کردن با آن دشوار است هم ایران شدیدا توسط این دسته از سرویس‌های گوگل تحریم است. در این میان یک اسکریپت با نام rapidleech در سایت گیتهاب و گوگل کد وجود داشت که کارش همین آپلود فایل‌ها از روی سرور به یوتیوب و … بود که به خاطر پشتیبانی از آپلودسنترهای غیرقانونی و وارز در هیچ سایت یا انجمن رسمی معرفی نشده بود ولی یک پلاگین داشت که برای آپلود به یوتیوب از آن استفاده می‌شد و مدت‌هاست که کار نمی‌کند. این اسکریپت تماما با زبان php نوشته شده بود و نیازی به استفاده از api های گوگل یا کار خاصی نداشت. کافی بود اسکریپت را به سرور منتقل کنید و بعد از طریق وب آن فایلها را انتخاب و آپلود کنید. البته یک محدودیت دارد و آن اینست که هر فایلی که آپلود می‌کنید نهایتا می‌تواند یک گیگ حجم داشته باشد. در اینجا من راه‌حلی را معرفی می‌کنم که از طریق یک اسکریپت پایتون و همان google api console شما فایل‌ها را مستقیما از روی سرور منتقل کنید و متدی که معرفی خواهم کرد محدودیت حجم ۱ گیگابایت را هم ندارد.

راه‌حل

این ریپازیتوری را با پایتون نوشتن. از آن کلون بگیرید و به داخل دایرکتوری آن بروید:

git clone https://github.com/tokland/youtube-upload
cd youtube-upload

دیپندنسی پایتون را نصب کنید:

pip install --upgrade google-api-python-client progressbar

فایل نصب را با یوزر root اجرا کنید:

sudo python setup.py install

نکته قابل توجه در اینجا اینست که ممکن است شما چند تا کانال یوتیوب را به اکانت جیمیل خودتان متصل کرده باشید و بخواهید فیلم‌ها با credential ایمیل شما در یکی از این کانال‌ها آپلود شوند. برای این منظور به سایت google developers console بروید و با جیمیل خودتان لاگین کنید. دقت کنید این سایت برای ایران تحریم است. یک جای وسط صفحه نوشته Enable and manage APIs به آنجا بروید. بین api ها یوتیوب را سرچ کنید و YouTube Data API v3 را انتخاب کنید. آن را enable کنید. حالا از منوی سمت چپ صفحه به بخش credentials بروید. new credential را بزنید و OAuth client ID را انتخاب کنید. بعد یک فهرست از انواع اپلیکیشن‌ها می‌آورد. شما other را انتخاب و اسم آن را youtube-upload بگذارید. در اینجا سیستم به شما یک client ID و یک client secret می‌دهد که شما با دومی جلوتر کار دارید. هنگام ساخت api یک صفحه داخل سایت یوتیوب برایتان باز می‌شود که در آن ابتدا می‌خواهد کانال مرتبط با api که فیلم‌ها قرار است در آن آپلود شوند را انتخاب کنید و سپس همین client secret را می‌خواهد و پایین آن نوشته «Please copy this code, switch to your application and paste it there:». سپس در فهرست credentialهایی که ساختید یک مورد youtube-upload را مشاهده می‌کنید که کنارش دو گزینه delete و download JSON دارد. روی دانلود کلیک کنید و فایل JSON را در پوشهٔ ریپازیتوری گیت روی سروری که آن را قبلن نصبش کردید آپلود کنید. حالا با دستور زیر می‌توانید فیلم را آپلود کنید:

youtube-upload --title="In The Name Of God" path/to/InTheNameOfGod.mp4 --client-secrets=[file_name].json

بعد از پایان کار آپلود فیلم به صفحهٔ ایجاد شده در یوتیوب بروید و اطلاعات داخل صفحه شامل توضیحات فیلم و keywordها و … را تکمیل کنید.