PDA

View Full Version : جست و جو در html



khatarat
پنج شنبه 27 خرداد 1389, 22:59 عصر
بچه ها من می خوام یه برنامه با جاوا اسکریپت بنویسم که وقتی فایلش رو کسی اجرا کرد این کد بره یکی دو تا صفحه از یه سرور دیگه به غیر از سرور خودم مثلا گوگل بیاره و توی اون صفحه جست و جو کنه و یه سری لینک خاص رو از توی اون صفحه دربیاره باید چیکار کنم؟

amirjalili
چهارشنبه 02 تیر 1389, 13:26 عصر
بریزش تویه xml document , بعد با توابع xml جستجو کن.

esmaeily-hosein
یک شنبه 06 تیر 1389, 10:12 صبح
بایستی در سایت خودت وب سرویسی بنویسی که در آن وب سرویس با استفاده از HttpWebRequest به سرورهای دیگر متصل شوی . سپس با javascript از طریق xhr وب سرویس خودتو call کنی .

به علت مسایل امنیتی browser شما اجازه ارسال به سرور های دیگر را نمیدهد .

khatarat
شنبه 23 مرداد 1389, 15:16 عصر
بریزش تویه xml document , بعد با توابع xml جستجو کن.

چطور می تونم این کار رو بکنم؟ یا مثلا اینکه صفحه رو توی یه فریم باز کنم و اطلاعاتش رو توی یه فایل ذخیره کنم و بعد اطلاعات اون فایل رو بخونم؟

mehdi.mousavi
شنبه 23 مرداد 1389, 16:37 عصر
سلام.


به علت مسایل امنیتی browser شما اجازه ارسال به سرور های دیگر را نمیدهد .

کاملا درسته، اما میشه با استفاده از JSONP به سرور Remote دسترسی پیدا کرد. اینطوری دیگه ایراد امنیتی ای هم وجود نخواهد داشت.


یا مثلا اینکه صفحه رو توی یه فریم باز کنم و اطلاعاتش رو توی یه فایل ذخیره کنم و بعد اطلاعات اون فایل رو بخونم؟

لطفا بیشتر توضیح بدید که این اطلاعات چی هستن؟ منظورم اطلاعاتی هستش که شما می خواهید از سرور دیگه ای Load کنید... XML، Text، HTML یا ...؟ اگر HTML مد نظرتونه، آیا بخش خاصی از اون HTML رو نیاز دارید؟ بسته به پیچیدگی HTML (اگر HTML باشه)، روش آقای اسماعیلی احتمالا مقرون به صرفه ترین روش هستش. ضمن اینکه میتونید توی Web Service خودتون داده ها رو Cache کنید و به ندرت به سرور اصلی رجوع کنید (تا سرور اصلی شما رو Block نکنه).

اگر اطلاعات JSON، XML و ... هستن، دیگه بهتر. چون JavaScript از این دو بصورت Native پشتیبانی میکنه. لطفا بیشتر توضیح بدید تا بهتر بشه کمک کرد.

موفق باشید.

khatarat
شنبه 23 مرداد 1389, 19:30 عصر
ببینید من می خوام متن یک فایل رو به دست بیارم. همونطور که در پست اول گفتم فرض کنید با جاوا اسکریپت همین صفحه رو باز کنم یعنی http://barnamenevis.org/forum/showthread.php?t=228375 و یه سری کارا رو روی متن html که به دست میارم انجام بدم مثلا ببنیم khatarat چند بار توی این صفحه نوشته شده.
کاری که fopen و file_get_contents در php انجام می ده. به اینصورت:

$file = fopen('http://example.com', 'r');
من می خوام همین کار رو انجام بدم ولی کدها روی کامپیوتر کاربر اجرا بشه و نه روی سرور.

mehdi.mousavi
شنبه 23 مرداد 1389, 23:43 عصر
ببینید من می خوام متن یک فایل رو به دست بیارم. همونطور که در پست اول گفتم فرض کنید با جاوا اسکریپت همین صفحه رو باز کنم یعنی http://barnamenevis.org/forum/showthread.php?t=228375 و یه سری کارا رو روی متن html که به دست میارم انجام بدم مثلا ببنیم khatarat چند بار توی این صفحه نوشته شده.
کاری که fopen و file_get_contents در php انجام می ده. به اینصورت:

$file = fopen('http://example.com', 'r');
من می خوام همین کار رو انجام بدم ولی کدها روی کامپیوتر کاربر اجرا بشه و نه روی سرور.

سلام.
بسیار خوب. روشی که آقای اسماعیلی ارائه دادن (نوشتن یک وب سرویس برای ارائه چنین سرویسی به Client ها) انعطاف پذیرترین راه حل هستش. اما اگر می خواهید از وب سرویس ها دوری کنید، باید با JSONP کارتون رو پیش ببرید (اگر چه هرگز این توصیه رو نمیکنم، چون باید کل این HTML رو ببرید سمت Client بعد توی پاسخ بر اساس الگوی مورد نظر 4 تا String رو Extract کنید که این هرگز مقرون به صرفه نیست. به همین دلیل اگر وب سرویسی برای اینکار بنویسید، اونطوری اطلاعات بین دو سرور با سرعت بالا رد و بدل میشه و فقط نتیجه (همون 4 تا رشته) بصورت JSON به Client ارسال میشه).

در هر حال، توی گوگل دنبال JSONP بگردید، مثالهایی از این روش رو پیدا خواهید کرد.

موفق باشید.

khatarat
یک شنبه 24 مرداد 1389, 12:17 عصر
این JSON که می گید فقط این رو در موردش پیدا کردم که مربوط به کاریه که من می خوام انجام بدم




var my_JSON_object = {};
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.onreadystatechange = function () {
if (http_request.readyState == 4 && http_request.status == 200){
my_JSON_object = JSON.parse( http_request.responseText );
}
};
http_request.send(null);



این روشی که از ajax برای ارسال یک http request استفاده می شه می تونم بگم که دقیقا همون چیزیه که من می خوام ولی من قبلا این روش رو هم امتحان کرده بودم که مشکلی که داشت اینه که فقط می تونه به سرور خودش این درخواست رو بفرسته و به بقیه سرور ها این درخواست رو نمی فرسته.
می شه بفرمایید که چطور می شه این مشکل رو با استفاده از این JSON حل کرد؟

khatarat
یک شنبه 24 مرداد 1389, 12:39 عصر
یه کد دیگه پیدا کردم توی سایت خود JSON ولی کار نمی کنه




requestNumber = JSONRequest.get(
"https://json.penzance.org/request",
function (requestNumber, value, exception) {
if (value) {
processResponse(value);
} else {
processError(exception);
}
}
);



می شه بگید که چطور باید ازش استفاده کنم و اینکه آیا سرورهایی که می شه این درخواست رو براشون فرستاد سرور های خاصی هستند یا برای همه سایت ها می شه این درخواست رو فرستاد؟

mehdi.mousavi
یک شنبه 24 مرداد 1389, 13:37 عصر
سلام.
ببینید. شما با استفاده از JSONP می تونید محدودیت Same Origin Policy رو دور بزنید. به بیان دیگه، توسط JSONP میتونید از یک Domain درخواست مورد نظرتون رو به Domain دیگری ارسال کرده و پاسخ رو دریافت کنید. روش کار بدین شکل هستش که شما یک Script Tag در صفحه (توسط Script و بصورت Dynamic) اضافه می کنید و Source اش رو اون Domain ای میذارید که مد نظرتونه و قرار داده ها رو ازش بگیرید. توی URL مربوطه، اسم یک Callback function رو هم پاس می کنید تا وقتی داده ها از سرور خونده شد، اون CallBack Function فراخوانی بشه و شما بتونید با داده های دریافت شده کار مورد نظر رو انجام بدید.

اما JSONP نیز جاهایی کاربرد داره که چنین سرویسی ارائه بشه... مثلا Flickr، Google و ... برخی از سایتهایی هستن که چنین سرویسی رو (برای مقاصد مختلف) ارائه میدن و این به این معنا هستش که شما میتونید توسط JSONP اطلاعات مورد نظر رو از این Domain ها بگیرید. این مقاله (http://www.ibm.com/developerworks/library/wa-aj-jsonp1/) هر آنچه را که شما در مورد JSONP نیاز دارید به شما خواهد گفت.

اگر نمیتونید وب سرویسی به این منظور بنویسید، کار دشوار میشه. من نمیدونم روی Domain ای که میخواهید اطلاعات رو ازش بگیرید میتونید فایل Upload کنید یا خیر. در واقع اگر شدنی باشه، میتونید Access-Control-Allow-Origin رو روی سروری که اطلاعات رو میخواهید ازش بگیرید Set کنید. بدین ترتیب، باید نام Domain ای رو که درخواست رو ارسال میکنه جلوی Access-Control-Allow-Origin قرار بدید. برای اینکار هم بسته به اینکه از سرور Linux ای یا Windows ای استفاده می کنید، باید به شکل متفاوت عمل کنید. اطلاعات بیشتر رو می تونید در این آدرس (https://developer.mozilla.org/en/HTTP_access_control) بخونید.

اگر فعال کردن این Header در Domain دوم براتون مقدور نیست، تنها راه باقیمونده نوشتن یک Web Service هستش که بعنوان Proxy بین Client شما و Remote Server عمل کنه.

موفق باشید.