ব্যবহারকারী হিসাবে প্রমাণীকরণ না করে কীভাবে আমি ইনস্টাগ্রাম থেকে কোনও ব্যবহারকারীর মিডিয়া পেতে পারি?


175

আমি ব্যবহারকারীর সাম্প্রতিক ইনস্টাগ্রাম মিডিয়াটি একটি সাইডবারে রাখার চেষ্টা করছি। আমি মিডিয়া আনার জন্য ইনস্টাগ্রাম এপিআই ব্যবহার করার চেষ্টা করছি।

http://instagram.com/developer/endpoints/users/

ডকুমেন্টেশনটি জিইটি-কে বলে https://api.instagram.com/v1/users/<user-id>/media/recent/, তবে এটি একটি OAuth অ্যাক্সেস টোকন পাস করতে বলে। অ্যাক্সেস টোকেন ব্যবহারকারীর পক্ষে কাজ করার অনুমোদনের প্রতিনিধিত্ব করে। আমি চাই না যে ব্যবহারকারীরা ইনস্টাগ্রামে লগইন করুন এটি সাইডবারে দেখতে। এমনকি তাদের একটি ইনস্টাগ্রাম অ্যাকাউন্ট থাকার দরকারও নেই।

উদাহরণস্বরূপ, আমি ইনস্টাগ্রামে লগইন না হয়ে http://instagram.com/thebrainscoop এ যেতে পারি এবং ফটো দেখতে পারি। আমি এপিআইয়ের মাধ্যমে এটি করতে চাই।

ইনস্টাগ্রাম এপিআইতে, অ-ব্যবহারকারীর-প্রমাণিত অনুরোধগুলি একটিটির client_idপরিবর্তে পাস করে access_token। আমি যদি এটি চেষ্টা করি তবে, আমি পেয়েছি:

{
  "meta":{
    "error_type":"OAuthParameterException",
    "code":400,
    "error_message":"\"access_token\" URL parameter missing. This OAuth request requires an \"access_token\" URL parameter."
  }
}

তাহলে, এটা কি সম্ভব নয়? প্রথমে ওআউথের মাধ্যমে কোনও ইনস্টাগ্রাম অ্যাকাউন্টে লগইন করার জন্য কোনও ব্যবহারকারীকে জিজ্ঞাসা না করে কোনও ব্যবহারকারীর সর্বশেষ (সর্বজনীন) মিডিয়া আনার কোনও উপায় নেই?


এই প্লাগইনটি দিয়ে এটি সম্ভব, কেবল ব্যবহারকারীকে তার ইনস্টাগ্রাম অ্যাকাউন্টে লগইন না করে তারা কীভাবে কোনও ব্যবহারকারীর সর্বশেষ পাবলিক মিডিয়া এনেছে তার উত্স কোডটি পরীক্ষা করে দেখুন। : ডি smashballoon.com/instગ્રામ-feed/demo আপনার কেবল একটি ক্লায়েন্ট আইডি দরকার, অ্যাক্সেস টোকেনের প্রয়োজন নেই। : ডি
জেহ্ল্লাউ

আপনাকে লিখন দরকার যাতে তারা আপনাকে ট্র্যাক করতে পারে এবং প্রতিটি বড় API এর মতো আপনার ডাউনলোডগুলি (রেট ...) সীমাবদ্ধ করতে পারে। প্রকৃত ব্যবহারকারীদের জন্য সর্বজনীন এবং স্ক্র্যাপার / বটগুলির জন্য সর্বজনীন রয়েছে, যা সাধারণত ব্যবহারকারীদের বিজ্ঞাপনগুলি দেখবে এবং সরাসরি পরিষেবাটি ব্যবহার করবে এমনটি হয় না।
ক্রিস্টোফ রাউসি

1
এই পদ্ধতিগুলির আর কোনও কাজ করে না work
স্ট্যাকওভারফ্লো.

উত্তর:


123

এটি দেরি হয়ে গেছে, তবে এটি যদি ইনস্টাগ্রামের ডকুমেন্টেশনে আমি এটি দেখতে না পাওয়ায় কাউকে সহায়তা করে তবে তা সার্থক।

https://api.instagram.com/v1/users/<user-id>/media/recent/(লেখার বর্তমান সময়ে) জিইটি সম্পাদন করতে আপনার আসলে OAuth অ্যাক্সেস টোকেনের প্রয়োজন নেই।

আপনি পারফর্ম করতে পারেন https://api.instagram.com/v1/users/[USER ID]/media/recent/?client_id=[CLIENT ID]

[ক্লায়েন্ট আইডি] ম্যানেজ ক্লায়েন্টদের (যা ব্যবহারকারীর সাথে সম্পর্কিত নয়) মাধ্যমে অ্যাপে নিবন্ধিত বৈধ ক্লায়েন্ট আইডি হবে। জিইটি ব্যবহারকারীদের অনুসন্ধানের অনুরোধ সম্পাদন করে আপনি ব্যবহারকারীর নাম থেকে [ব্যবহারকারী আইডি] পেতে পারেন: https://api.instagram.com/v1/users/search?q=[USERNAME]&client_id=[CLIENT ID]


9
আমি মনে করি তারা আবার তাদের মন পরিবর্তন করেছে। আমি ওপি-তে দেখানো একই ত্রুটির প্রতিক্রিয়া পাচ্ছি
জেমস

35
এটি কেবল নভেম্বর 17 2015 এর আগে তৈরি করা অ্যাপ্লিকেশনগুলিতে বৈধ, এবং জুন 2016 এর পরে একেবারেই সমর্থন করা হবে না After এর পরে আপনার একটি ওউথ অ্যাক্সেস_ টোকেন প্রয়োজন। ইনস্টাগ্রাম.
com/ ডেভেলপার / এক্সচেঞ্জলগ

211
এটি এত বোকা এবং বিরক্তিকর। কেন তারা ইতিমধ্যে সর্বজনীন চিত্রগুলি প্রদর্শন করতে অ্যাক্সেস টোকেনকে বাধ্য করবে ? আমি বিশ্বের প্রতিটি ব্যবহারকারীর জন্য এগুলিকে ধুয়ে ফেলার চেষ্টা করছি, আমি কেবল ক্লায়েন্টের সর্বশেষতম ইন্সটাটি সাথে ব্যর্থতা অবলম্বন না করেই প্রদর্শন করতে চাই। গাহ!
ম্যাট ফ্লেচার

8
@ ক্যাবস রেট সীমা, সাথী।
ওয়াল্ফ 25:56

20
@ ম্যাটফ্লেচার এখন আরও মূর্খ, একজনকে অবশ্যই অ্যাপ্লিকেশন অনুমতি পর্যালোচনার মধ্য দিয়ে যেতে হবে এবং নিশ্চিত হওয়া যায়নি যে এটি ব্যবহারের ক্ষেত্রে "ক্লায়েন্টের নিজস্ব ফিডকে তাদের নিজস্ব ওয়েবপৃষ্ঠায় দেখানো" ব্যবহারের ক্ষেত্রে নয়। ওহ, এই বিধিনিষেধগুলি স্তন্যপান।
সিয়ানটিক

334

var name = "smena8m";
$.get("https://images"+~~(Math.random()*3333)+"-focus-opensocial.googleusercontent.com/gadgets/proxy?container=none&url=https://www.instagram.com/" + name + "/", function(html) {
if (html) {
    var regex = /_sharedData = ({.*);<\/script>/m,
        json = JSON.parse(regex.exec(html)[1]),
        edges = json.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges;

      $.each(edges, function(n, edge) {
          var node = edge.node;
          $('body').append(
              $('<a/>', {
              href: 'https://instagr.am/p/'+node.shortcode,
              target: '_blank'
          }).css({
              backgroundImage: 'url(' + node.thumbnail_src + ')'
          }));
      });
    }
});
html, body {
  font-size: 0;
  line-height: 0;
}

a {
  display: inline-block;
  width: 25%;
  height: 0;
  padding-bottom: 25%;
  background: #eee 50% 50% no-repeat;
  background-size: cover;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

ব্যবহার করে আপনি JSON ফর্ম্যাটে কোনো ইনস্টাগ্রাম ব্যবহারকারী ফটো ফিড বিনামূল্যে ডাউনলোড করতে পারেন ?__a=1থেকে অবতরণ পাতা ঠিকানা আগামী ভালো । ব্যবহারকারীর আইডি পেতে বা কোনও অ্যাপ্লিকেশন নিবন্ধকরণ করার দরকার নেই, টোকেন নেই, কোনও ওউথ নেই।

min_idএবং max_idভেরিয়েবল পত্রাঙ্কন ব্যবহার করা যেতে পারে, এখানে উদাহরণস্বরূপ

YQLস্নিপড iframe এর ভিতরে এখানে কাজ নাও করতে পারে, তাই আপনি সর্বদা এটি YQL কনসোলে ম্যানুয়ালি পরীক্ষা করতে পারেন check

এপ্রিল 2018 আপডেট: সর্বশেষ ইনস্ট্রাগ্রাম আপডেটের পরে আপনি ক্লায়েন্ট সাইডে (জাভাস্ক্রিপ্ট) এটি করতে পারবেন না কারণ CORS Access-Control-Allow-Headersসীমাবদ্ধ অনুরোধের জন্য কাস্টম শিরোনাম জাভাস্ক্রিপ্টের সাথে সীমাবদ্ধতার কারণে সেট করা যাবে না । এটা তোলে মাধ্যমে এই কাজ করতে তবুও phpসঠিক স্বাক্ষর উপর ভিত্তি করে দিয়ে বা অন্য কোন সার্ভার প্রান্তের পদ্ধতি rhx_gis, csrf_tokenএবং অনুরোধ প্যারামিটার। আপনি এটি সম্পর্কে এখানে আরও পড়তে পারেন ।

জানুয়ারী 2019 আপডেট: ওয়াইকিউএল অবসর নিয়েছে, তাই, CORSইনস্টাগ্রাম পৃষ্ঠার প্রক্সি হিসাবে গুগল ইমেজ প্রক্সির সাথে আমার সর্বশেষ আপডেটটি চেক করুন ! তারপরে কেবল নেতিবাচক মুহূর্ত - পৃষ্ঠা পদ্ধতি এই পদ্ধতির সাথে উপলভ্য নয়।

PHP সমাধান:

    $html = file_get_contents('https://instagram.com/apple/');
    preg_match('/_sharedData = ({.*);<\/script>/', $html, $matches);
    $profile_data = json_decode($matches[1])->entry_data->ProfilePage[0]->graphql->user;

14
@ 350D আপনি এটি কীভাবে পেলেন? আমি তাদের ডকুমেন্টেশনে এটি কোথাও খুঁজে পাচ্ছি না। আমি এই শেষ পয়েন্ট (ইজি স্কোয়ার ইমেজ বনাম নন-স্কোয়ারের সাথে জুনে শেষ হওয়ার পরিকল্পনা রয়েছে কিনা ইত্যাদি) সম্পর্কে আরও পড়তে চাই - ধন্যবাদ!
ফিল জনস্টন

8
@ ফিলি জনস্টন কেবল একটি গবেষণা 😀 এটিকে আরেকটি নিন - আপনি ফটো / মিডিয়া /? আকার = এল ছবির ল্যান্ডিং পৃষ্ঠার ইউআরএলের পাশে যুক্ত করতে এবং সম্পূর্ণ রেজোলিউশন ফটো পেতে পারেন।
350 ডি

9
@ ব্যবহারকারী2659694 অবশেষে আমি এই পদ্ধতিটি ব্যবহার করে আপনি / মিডিয়া /? সর্বোচ্চ_আইডি = [ম্যাক্স_আইডি] ব্যবহার করতে পারেন পরবর্তী পৃষ্ঠাগুলি পাওয়ার সমাধানটি পেয়েছি
রেজা

3
এফওয়াইআই এটি কেবল তখনই কাজ করে যদি আপনি নিজে কোনও ইনস্টাগ্রাম অ্যাকাউন্টে লগইন হন। এটি Chrome বা অনুরূপ ছদ্মবেশে করার চেষ্টা করুন এবং আপনি দেখতে পাবেন যে JSON প্রতিক্রিয়াতে কোনও আইটেম নেই। ওয়েব সার্ভারে ইউআরএলগুলির তালিকা পেতে আমি এটি কোনও স্ক্রিপ্টে অন্তর্ভুক্ত করার চেষ্টা করছিলাম এবং পুরানো অনুমোদনের পদ্ধতিতে ফিরে যেতে হয়েছিল।
রায়ান জিংক

9
@ রায়ানজিংক আপনি কি একটি ব্যক্তিগত অ্যাকাউন্ট চেষ্টা করছিলেন? এটি আমার জন্য লগ আউট করা বা জনসাধারণের অ্যাকাউন্টগুলিতে ছদ্মবেশ ধারণ করে ok
রায়ান

41

11.11.2017
যেহেতু ইনস্টাগ্রামটি এই ডেটা সরবরাহের পদ্ধতি পরিবর্তন করেছে তাই আজকাল উপরের কোনও পদ্ধতিই কাজ করে না। ব্যবহারকারীর মিডিয়া পাওয়ার নতুন উপায়টি এখানে :
GET https://instagram.com/graphql/query/?query_id=17888483320059182&variables={"id":"1951415043","first":20,"after":null}
কোথায়:
query_idস্থায়ী মান: 17888483320059182 (নোট করুন এটি ভবিষ্যতে পরিবর্তিত হতে পারে)।
id- ব্যবহারকারীর আইডি। এটি ব্যবহারকারীর তালিকায় আসতে পারে। ব্যবহারকারীর তালিকা পেতে আপনি নিম্নলিখিত অনুরোধটি ব্যবহার করতে পারেন: GET https://www.instagram.com/web/search/topsearch/?context=blended&query=YOUR_QUERY
first- পেতে আইটেমের পরিমাণ।
after- আপনি যদি সেই আইডি থেকে আইটেম পেতে চান তবে সর্বশেষ আইটেমটির আইডি।


আপনি কি দয়া করে আমাকে কোথা থেকে কোথাও কোথাও_আইডি এবং ব্যবহারকারীর আইডি পেতে পারেন?
বিজয়সিংহ পরমার

2
@ বিজয়સિંહ পারমার যেমনটি আমি উল্লেখ করেছি, query_idস্থায়ী মূল্য value এর অর্থ এটি সর্বদা 17888483320059182 (কমপক্ষে ইনস্টাগ্রাম পরিবর্তন না করে)। ব্যবহারকারীর আইডি - ব্যবহারকারীর আইডি (আমার উত্তরটি কিছুটা সম্পাদনা করা হয়েছে)
ফুটনিকো

1
আমি ঠিক মনে করি না, ইন্টারনেটে কোথাও। তবে ইনস্টাগ্রামের সাথে আমার কোনও সম্পর্ক নেই, তাই যদি এটি পরিবর্তিত হয় তবে আমি আপনাকে
নতুনটি

1
ভাবুন এই পদ্ধতির হার সীমাবদ্ধ নীতি কী?
kkzxak47

1
কারও কারও কাছে যদি এই ইউআরএলকে সিআরএল অনুরোধের মাধ্যমে অনুরোধ করতে সমস্যা হয়, তবে আপনাকে কুকির অনুরোধ শিরোনামটি পেতে হবে (ইউআরএল চালানোর পরে নেটওয়ার্ক ট্যাব খুলুন, কুকির শিরোনামটি অনুলিপি করুন এবং এটি কার্ল অনুরোধ শিরোনামে পেস্ট করুন you আপনি যদি এটি না করেন, আপনি একটি 403 অ্যাক্সেস অস্বীকার ত্রুটি পাবেন)।
অ্যান্ডার্স

39

আমি প্রমাণীকরণ ছাড়াই নিম্নলিখিত বিবরণটি ব্যবহার করে (বিবরণ, পছন্দ, মন্তব্য গণনা সহ) ব্যবহারকারীর অতি সাম্প্রতিক মিডিয়া পেতে সক্ষম হয়েছি

https://www.instagram.com/apple/?__a=1

যেমন

https://www.instagram.com/{username}/?__a=1

1
এটি আমার পক্ষেও কাজ করেছে ut তবে "যখন_ইডিও = সত্য", ডেটাতে কোনও ভিডিও ইউআরএল নেই।
দিদীকি

4
ঠিক আছে, আপনি কেবল থাম্বনেইলগুলি পেতে পারেন (ভিডিওটি নিজেই নয়) - দুর্ভাগ্যক্রমে, আমি এর জন্য কোনও অফিসিয়াল ডকুমেন্টেশন পাইনি এবং এই এপিআইটি হ্রাস পেয়েছে বা এটি কতক্ষণ সমর্থনযোগ্য হবে তা আমার কোনও ধারণা নেই।
মাইকেল

8
2018-04-13 হিসাবে, এটি আর কাজ করবে না বলে মনে হচ্ছে। ফেসবুকের সর্বশেষ ক্যামব্রিজ অ্যানালিটিকা ডেটা কেলেঙ্কারির কারণে, তারা এক টন জিনিসকে আরও শক্ত করে তুলছে। প্রমাণীকরণ ছাড়া মৌলিক ব্যবহারকারীর ডেটা পাওয়ার জন্য অন্য কোনও পরামর্শ?
বেকারস্ট্রিটসিস্টেমস

2
হ্যাঁ, একটি সময় ছিল যে এই এপিআই কাজ করে না - তবে এখন এটি আবার ফিরে এসেছে
মাইকেল

4
এটি আমার পক্ষে কাজ করেছিল, তবে আমি যখন ইনস্টাগ্রামে লগ ইন করি।
zundi

16

গত সপ্তাহের মতো, ইনস্টাগ্রামটি /media/ইউআরএলগুলি অক্ষম করেছে , আমি একটি কার্যকর প্রয়োগ করেছি, যা আপাতত বেশ ভালভাবে কাজ করে।

এই থ্রেডে প্রত্যেকের সমস্যা সমাধানের জন্য, আমি এটি লিখেছি: https://github.com/whizzzkid/instagram-reverse-proxy

এটি নিম্নলিখিত প্রান্তগুলি ব্যবহার করে ইনস্টাগ্রামের সমস্ত পাবলিক ডেটা সরবরাহ করে:

ব্যবহারকারী মিডিয়া পান:

https://igapi.ga/<username>/media
e.g.: https://igapi.ga/whizzzkid/media 

সীমা গণনা সহ ব্যবহারকারী মিডিয়া পান:

https://igapi.ga/<username>/media?count=N // 1 < N < 20
e.g.: https://igapi.ga/whizzzkid/media?count=5

JSONP ব্যবহার করুন:

https://igapi.ga/<username>/media?callback=foo
e.g.: https://igapi.ga/whizzzkid/media?callback=bar

প্রক্সি এআইপি পরবর্তী প্রতিক্রিয়াতে পূর্ববর্তী পৃষ্ঠা এবং পূর্ববর্তী পৃষ্ঠার ইউআরএল সংযোজন করে যাতে আপনার এটি শেষে আপনার গণনা করার দরকার নেই।

আশা করি এটা তোমাদের পছন্দ হবে!

এটি স্পষ্ট করার জন্য @ 350 ডি ধন্যবাদ জানায় :)


1
@rex যতক্ষণ না তারা পরিবর্তন করে যে কীভাবে জিনিসগুলি তাদের শেষের দিকে কাজ করে, আমরা ভাল! তারা গত 3 বছরে বিরক্ত করেনি, সম্ভবত তারা পরের 3 এ পারবে না
whizzzkid

3
@ WHizzzkid দুর্ভাগ্য, তারা এটি পরিবর্তন করে। আমি দেখেছি যে আপনি ভাবছেন ব্যবহারকারী শেষ পয়েন্টটি কাজগুলি করবে তবে ব্যবহারকারীদের লগ ইন না করার জন্য অনুরোধের সীমাবদ্ধতা রয়েছে। কোন ধারনা?
nobilik

1
@ নোবিলিকের কাজটি ঠিক জায়গায় রয়েছে, igpi.ga/whizzzkid/media?count=3 এবং igpi.ga/ographicql/query/?user_id=1606740656&count=3 উভয়ই আপনার ডেটা ফিরিয়ে আনতে হবে। মনে রাখবেন, এই ইউআরএলগুলির জন্য অপরিবর্তিত রেফারাররা অক্ষম রয়েছে।
whizzzkid

1
@ WHizzzkid - বুঝতে পারছি! আপনাকে অনেক ধন্যবাদ - আপনি একজন আলেম এবং ভদ্রলোক!
জেমস ট্রাইকি

1
আমি একটি "রেফারার অ্যাক্সেস অস্বীকার করা হয়েছিল" ত্রুটি পাচ্ছি। সম্ভবত এটি আর কাজ করে না?
খালিদ 13

14

ইনস্টাগ্রাম এপিআই এর কোনও ব্যবহারকারীর সাম্প্রতিক মিডিয়া এন্ডপয়েন্টটি অ্যাক্সেস করতে OAuth এর মাধ্যমে ব্যবহারকারীর প্রমাণীকরণের প্রয়োজন। কোনও ব্যবহারকারীর জন্য সমস্ত মিডিয়া পেতে এখনই অন্য কোনও উপায় বলে মনে হচ্ছে না।


4
এটির কোনও মানে হয় না, যদি আমি আমার নিজস্ব মিডিয়াটি নিজের ওয়েবসাইটে প্রদর্শন করতে চাই, তবে ইনস্টাগ্রাম অ্যাকাউন্টের জন্য যাঁরা এটি দেখতে চান তাদের কেন আমার প্রয়োজন হবে?
নিনজাসনেসে

5
নিনজাসনেসে - আমি মনে করি না যে এটি কীভাবে কাজ করে। আমি মনে করি আপনার ওয়েবসাইটটিতে কিছুটা কোড থাকা দরকার যা আপনার মিডিয়াতে টানতে সরবরাহ করা আপনার ওউথ শংসাপত্রগুলির সাহায্যে ইনস্টাগ্রাম এপিআইতে কোয়েরি করবে। তারপরে আপনি আপনার সাইটের যে কোনও ব্যবহারকারীর কাছে আপনার মিডিয়াটি প্রদর্শন করবেন। আপনার সাইটটি কেবলমাত্র ইনস্টাগ্রামের সাথে প্রমাণীকরণের প্রয়োজন।
বিল রাউলিনসন

9

আপনি যদি একক অ্যাকাউন্টে ব্যবহারের জন্য অ্যাক্সেস টোকেন তৈরির কোনও উপায় সন্ধান করে থাকেন তবে আপনি এটি চেষ্টা করতে পারেন -> https://coderwall.com/p/cfgneq

নির্দিষ্ট অ্যাকাউন্টের জন্য সমস্ত সর্বশেষ মিডিয়া দখল করতে আমার ইনস্টাগ্রাম এপিআই ব্যবহার করার একটি উপায় প্রয়োজন।


5
শেষ পর্যন্ত আমি যা করেছি এটি কম বা কম: একটি নতুন অ্যাকাউন্ট তৈরি করেছে, এর জন্য একটি অ্যাক্সেস টোকেন তৈরি করেছে এবং সেই টোকনটি API কী এর পাশে আমার সার্ভার কনফিগারেশনে সঞ্চয় করে। এটি জেএস অ্যাপ্লিকেশনগুলির জন্য একটি দুর্বল সমাধান, যদিও এটির জন্য আপনার অ্যাক্সেস টোকনটি ব্যবহারকারীর কাছে প্রেরণ করা প্রয়োজন (যা আমি প্রচুর উদাহরণ কোড দেখেছি)। ভাগ্যক্রমে আমার জন্য, আমি এটি সার্ভার-সাইড করতে পারি।
Peeja

4
@ ক্রেইগহেনভেল্ড আপনি টু ডেট অ্যাক্সেস টু টু ডেট রাখার বিষয়ে কীভাবে যাচ্ছেন? আপনার কি মেয়াদ শেষ হয়নি?
রায়ান অরে

টোকেনটির কি কোনও সময় মেয়াদ শেষ হয়?
মনিটাস

যদি আমার স্মৃতি আমাকে পরিবেশন করে, আপনি নিজের পাসওয়ার্ড পরিবর্তন করলেই কীটির মেয়াদ শেষ হবে। বিষয়টি সম্পর্কে এখানে আরও একটি থ্রেড দেওয়া হয়েছে -> স্ট্যাকওভারফ্লো.com
ক্রেগ হেনিভেল্ড

আমরা কীভাবে একাধিক ব্যবহারকারীর ছবি পেতে পারি ?? আমরা কি "," দ্বারা পৃথক একাধিক ব্যবহারকারীর আইডি পাস করতে পারি?
আদিল কেশওয়ানি

9

এখানে একটি রেল সমাধান। এটি এক ধরনের পিছনের দরজা, যা আসলে সামনের দরজা।

# create a headless browser
b = Watir::Browser.new :phantomjs
uri = 'https://www.instagram.com/explore/tags/' + query
uri = 'https://www.instagram.com/' + query if type == 'user'

b.goto uri

# all data are stored on this page-level object.
o = b.execute_script( 'return window._sharedData;')

b.close

আপনি যে জিনিসটি ফিরে পাবেন তা ব্যবহারকারী অনুসন্ধান বা কোনও ট্যাগ অনুসন্ধানের উপর নির্ভর করে পরিবর্তিত হয়। আমি এই জাতীয় ডেটা পেয়েছি:

if type == 'user'
  data = o[ 'entry_data' ][ 'ProfilePage' ][ 0 ][ 'user' ][ 'media' ][ 'nodes' ]
  page_info = o[ 'entry_data' ][ 'ProfilePage' ][ 0 ][ 'user' ][ 'media' ][ 'page_info' ]
  max_id = page_info[ 'end_cursor' ]
  has_next_page = page_info[ 'has_next_page' ]
else
  data = o[ 'entry_data' ][ 'TagPage' ][ 0 ][ 'tag' ][ 'media' ][ 'nodes' ]
  page_info = o[ 'entry_data' ][ 'TagPage' ][ 0 ][ 'tag' ][ 'media' ][ 'page_info' ]
  max_id = page_info[ 'end_cursor' ]
  has_next_page = page_info[ 'has_next_page' ]
end

তারপরে আমি নিম্নলিখিত পদ্ধতিতে একটি ইউআরএল তৈরি করে ফলাফলের অন্য পৃষ্ঠাটি পেয়েছি:

  uri = 'https://www.instagram.com/explore/tags/' + query_string.to_s\
    + '?&max_id=' + max_id.to_s
  uri = 'https://www.instagram.com/' + query_string.to_s + '?&max_id='\
    + max_id.to_s if type === 'user'

এই সমাধানটি আমার পক্ষে কাজ করছে, তবে এটির সাথে আমার কিছুটা সমস্যা হচ্ছে। ডেটা লোড করার পরে, আমার রেল সার্ভার (রেলস 5.0.0, পুমা 3.6.0 সার্ভার ব্যবহার করে) অনভিজ্ঞভাবে পুনঃসূচনা করে ... কোনও সম্ভাব্য সমাধান?
লুইস এডুয়ার্ডো রোজাস ক্যাবেরা

8

ইনস্টাগ্রামের সর্বদা পরিবর্তিত (এবং ভয়ঙ্করভাবে ডিজাইন করা) এপিআই স্কিমাকে ধন্যবাদ উপরোক্ত বেশিরভাগ এপ্রিল 2018 পর্যন্ত আর কাজ করবে না।

আপনি যদি সরাসরি https://www.instagram.com/username/?__a=1পদ্ধতিটি ব্যবহার করে তাদের এপিআই অনুসন্ধান করে থাকেন তবে স্বতন্ত্র পোস্ট ডেটা অ্যাক্সেসের সর্বশেষতম পথটি এখানে ।

আপনার ফিরে আসা JSONডেটা ধরে নিলে $dataআপনি নিম্নলিখিত পথের উদাহরণগুলি ব্যবহার করে প্রতিটি ফলাফলের মধ্য দিয়ে লুপ করতে পারেন:

foreach ($data->graphql->user->edge_owner_to_timeline_media->edges as $item) {

    $content_id = $item->node->id; 
    $date_posted = $item-node->taken_at_timestamp;
    $comments = $item->node->edge_media_to_comment->count;
    $likes = $item->node->edge_liked_by->count;
    $image = $item->node->display_url;
    $content = $item->node->edge_media_to_caption->edges[0]->node->text;
    // etc etc ....
}

এই সাম্প্রতিক পরিবর্তনের প্রধান বিষয়গুলি ছিল graphqlএবং edge_owner_to_timeline_media

দেখে মনে হচ্ছে যে তারা DEC 2018 এ 'ব্যবসায়িক' নন গ্রাহকদের জন্য এই এপিআই অ্যাক্সেসটি বন্ধ করে দিচ্ছে তাই আপনি যখন যা করতে পারেন তার সর্বাধিক এটি তৈরি করুন।

আশা করি এটি কারও সাহায্য করবে;)


এটি কেবল আমাকে সহায়তা করেছে, আমি কেবলমাত্র একটি ক্লায়েন্টের জন্য সর্বশেষতম ইনস্টাগ্রাম পোস্টগুলি প্রদর্শন করতে চাই। ধন্যবাদ!
ওয়েস্টন দেবোয়ার

1
ইনস্টাগ্রাম. com/ ব্যবহারকারীর নাম? এইচটিটিপি এরর 403 অন্য কোন ধারণা?
Hese

1
ইয়েপ ইনস্টাগ্রাম এখন এটি বন্ধ করে দিয়েছে। "ইনস্টাগ্রাম ব্যবহারকারীদের গোপনীয়তা এবং সুরক্ষা অব্যাহতভাবে উন্নতি করার জন্য, আমরা নিম্নলিখিত পরিবর্তনগুলি তাত্ক্ষণিকভাবে কার্যকর করে ইনস্টাগ্রাম এপিআই প্ল্যাটফর্মের অবমূল্যায়নকে ত্বরান্বিত করছি We আমরা বুঝতে পারি যে এটি আপনার ব্যবসা বা পরিষেবাগুলিকে প্রভাবিত করতে পারে এবং আমরা আমাদের প্ল্যাটফর্মকে সুরক্ষিত রাখতে আপনার সমর্থনকে প্রশংসা করি। এই ক্ষমতাগুলি তাত্ক্ষণিকভাবে অক্ষম করা হবে (পূর্বে 31 জুলাই, 2018 বা 11 ডিসেম্বর, 2018 অবমূল্যায়নের জন্য সেট করা হয়েছে) "
মশলাদার

আমি যা পড়ছি তা যদি সঠিক হয় তবে কোনও "অ-ব্যবসা" অ্যাকাউন্ট থেকে চিত্র বা ডেটা পুনরুদ্ধার করা আর সম্ভব হবে না। তারা সম্পূর্ণরূপে প্ল্যাটফর্ম এপিআই বন্ধ করছে। আমার ধারণা এটি তখনই ... ইনস্টাগ্রাম
মশলা

1
@ জেমস_টুকি সম্ভব সঙ্গী হতে পারে না। তাদের নতুন গোপনীয়তার বিধিনিষেধের কারণে এটি কেবলমাত্র ব্যবসায়িক অ্যাকাউন্ট / ব্যবহারকারীদের / ব্যক্তিগত অ্যাকাউন্টের ডেটা পুনরুদ্ধার করতে সক্ষম হবে না। মূলত তারা ব্যক্তিগত অ্যাকাউন্টগুলির জন্য সমস্ত এপিআই ব্যবহার মেরে ফেলেছে।
মশলা

7

JSFiddle

javascript:

$(document).ready(function(){

    var username = "leomessi";
    var max_num_items = 5;

    var jqxhr = $.ajax( "https://www.instagram.com/"+username+"/?__a=1" ).done(function() {
        //alert( "success" );
    }).fail(function() {
        //alert( "error" );
    }).always(function(data) {
        //alert( "complete" )
        items = data.graphql.user.edge_owner_to_timeline_media.edges;
        $.each(items, function(n, item) {
            if( (n+1) <= max_num_items )
            {
                var data_li = "<li><a target='_blank' href='https://www.instagram.com/p/"+item.node.shortcode+"'><img src='" + item.node.thumbnail_src + "'/></a></li>";
                $("ul.instagram").append(data_li);
            }
        });

    });

});

এইচটিএমএল:

<ul class="instagram">
</ul>

সিএসএস:

ul.instagram {
    list-style: none;
}

ul.instagram li {
  float: left;
}

ul.instagram li img {
    height: 100px;
}

5

কেবল @ 350 ডি উত্তর যুক্ত করতে চাই, যেহেতু এটি বুঝতে আমার পক্ষে কঠিন ছিল।

কোডে আমার যুক্তিটি পরবর্তী:

প্রথমবার এপিআই কল করার সময়, আমি কেবল কল করছি https://www.instagram.com/_vull_ /media/। যখন আমি প্রতিক্রিয়া পাই, আমি এর বুলিয়ান মান পরীক্ষা করি more_available। যদি এটি সত্য হয়, আমি অ্যারে থেকে শেষ ছবিটি পাই, তার আইডি পেয়েছিলাম এবং তারপরে আবার ইনস্টাগ্রাম এপিআইতে কল করুন তবে এবার https://www.instagram.com/_vull_/media/?max_id=1400286183132701451_1642962433

এখানে জেনে রাখা গুরুত্বপূর্ণ বিষয়, এই আইডিটি অ্যারের শেষ ছবির আইডি। সুতরাং অ্যারেতে ছবির শেষ আইডি সহ ম্যাক্সআইডির জন্য জিজ্ঞাসা করার সময়, আপনি পরবর্তী 20 টি ছবি এবং আরও কিছু পাবেন।

আশা করি এই বিষয়গুলি স্পষ্ট হবে।


4

আপনি যদি ওউথকে বাইপাস করেন তবে আপনি কোন ইনস্টাগ্রাম ব্যবহারকারী তা সম্ভবত জানেন না। বলা হচ্ছে প্রমাণীকরণ ছাড়াই ইনস্টাগ্রাম চিত্র পাওয়ার কয়েকটি উপায় রয়েছে।

  1. ইনস্টাগ্রামের এপিআই আপনাকে অনুমোদন না করে ব্যবহারকারীর সর্বাধিক জনপ্রিয় চিত্রগুলি দেখতে দেয়। নিম্নলিখিত শেষ পয়েন্ট ব্যবহার: এখানে লিঙ্ক

  2. ইনস্টাগ্রাম এ ট্যাগ RSS ফীড প্রদান করে এই

  3. ইনস্টাগ্রাম ব্যবহারকারীর পৃষ্ঠাগুলি সর্বজনীন, সুতরাং আপনি যে চিত্রটি ট্যাগটি চান তার জন্য এইচটিএমএল অনুসন্ধান করার জন্য তাদের পৃষ্ঠার জন্য সিআরএল এবং পিএইচপি ব্যবহার করতে পারেন OM


9
পুরানো মনে হচ্ছে।
বুড়াক টোকাক

ইনস্টাগ্রামের জন্য প্রমাণীকরণের বাইপাস করা কি সম্ভব
জ্যাক

3

আর একটি কৌশল, হ্যাশট্যাগ দ্বারা ফটো অনুসন্ধান করুন:

GET https://www.instagram.com/graphql/query/?query_hash=3e7706b09c6184d5eafd8b032dbcf487&variables={"tag_name":"nature","first":25,"after":""}

কোথায়:

query_hash - স্থায়ী মান (আমি এর হ্যাশটিকে 17888483320059182 তে বিশ্বাস করি, ভবিষ্যতে পরিবর্তন করা যেতে পারে)

tag_name - খেতাবটি নিজের কথা বলছে

first - প্রাপ্ত আইটেমের পরিমাণ (কেন জানি না, তবে এই মানটি প্রত্যাশার মতো কাজ করে না returned প্রত্যাবর্তিত ফটোগুলির আসল সংখ্যাটি 4.5 দ্বারা গুণিত মানের চেয়ে কিছুটা বড় (25 মানের জন্য 110, এবং প্রায় 460) মান 100))

after- আপনি যদি সেই আইডি থেকে আইটেম পেতে চান তবে সর্বশেষ আইটেমটির আইডি। end_cursorJSON প্রতিক্রিয়া থেকে মান এখানে ব্যবহার করা যেতে পারে।


আপনি এটি কিভাবে খুঁজে?
একেন্টার্টমজ 21'19

3

ঠিক আছে, /?__a=1এখনই কাজ বন্ধ হয়ে যাওয়ার সাথে সাথে, এই উত্তরে লেখা হিসাবে কার্ল ব্যবহার এবং ইনস্টাগ্রাম পৃষ্ঠাটি পার্স করা ভাল: লগ ইন না করে অ্যাক্সেস টোকেন ইনস্টাগ্রাম এপিআই তৈরি করুন?


3

আপনি যদি ক্লায়েন্টআইডি এবং অ্যাক্সেস টোকেন ছাড়াই ব্যবহারকারীদের সন্ধান করতে চান:

1: আপনি যদি আপনার নামের সাথে আপনার অনুসন্ধান শব্দের অনুরূপ সমস্ত ব্যবহারকারী অনুসন্ধান করতে চান:

আপনি সন্ধান করতে চান এমন পাঠ্য দিয়ে সিচনেম প্রতিস্থাপন করুন:

https://www.instagram.com/web/search/topsearch/?query=SearchName

2: আপনি যদি একই নাম ব্যবহারকারীর সন্ধান করতে চান:

আপনার পছন্দসই অনুসন্ধান নামের সাথে ব্যবহারকারীর নাম প্রতিস্থাপন করুন:

https://www.instagram.com/UserName/?__a=1


2

ইনস্টাগ্রাম ব্যবহারকারীর জনসাধারণের তথ্য পুনরুদ্ধার করতে আপনি এই API টি ব্যবহার করতে পারেন:
https://api.lityapp.com/instagrams/thebrainscoop?limit=2

আপনি যদি সীমা পরামিতিটি সেট না করেন তবে পোস্টগুলি ডিফল্ট হিসাবে 12 এ সীমাবদ্ধ থাকে

এটি এপিটি এইচটিএমএল ইউনাইট দিয়ে স্প্রিংবুটে তৈরি হয়েছিল আপনি কোডটিতে দেখতে পাচ্ছেন:

public JSONObject getPublicInstagramByUserName(String userName, Integer limit) {
    String html;
    WebClient webClient = new WebClient();

    try {
        webClient.getOptions().setCssEnabled(false);
        webClient.getOptions().setJavaScriptEnabled(false);
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getCookieManager().setCookiesEnabled(true);

        Page page = webClient.getPage("https://www.instagram.com/" + userName);
        WebResponse response = page.getWebResponse();

        html = response.getContentAsString();
    } catch (Exception ex) {
        ex.printStackTrace();

        throw new RuntimeException("Ocorreu um erro no Instagram");
    }

    String prefix = "static/bundles/es6/ProfilePageContainer.js";
    String sufix = "\"";
    String script = html.substring(html.indexOf(prefix));

    script = script.substring(0, script.indexOf(sufix));

    try {
        Page page = webClient.getPage("https://www.instagram.com/" + script);
        WebResponse response = page.getWebResponse();

        script = response.getContentAsString();
    } catch (Exception ex) {
        ex.printStackTrace();

        throw new RuntimeException("Ocorreu um erro no Instagram");
    }

    prefix = "l.pagination},queryId:\"";

    String queryHash = script.substring(script.indexOf(prefix) + prefix.length());

    queryHash = queryHash.substring(0, queryHash.indexOf(sufix));
    prefix = "<script type=\"text/javascript\">window._sharedData = ";
    sufix = ";</script>";
    html = html.substring(html.indexOf(prefix) + prefix.length());
    html = html.substring(0, html.indexOf(sufix));

    JSONObject json = new JSONObject(html);
    JSONObject entryData = json.getJSONObject("entry_data");
    JSONObject profilePage = (JSONObject) entryData.getJSONArray("ProfilePage").get(0);
    JSONObject graphql = profilePage.getJSONObject("graphql");
    JSONObject user = graphql.getJSONObject("user");
    JSONObject response = new JSONObject();

    response.put("id", user.getString("id"));
    response.put("username", user.getString("username"));
    response.put("fullName", user.getString("full_name"));
    response.put("followedBy", user.getJSONObject("edge_followed_by").getLong("count"));
    response.put("following", user.getJSONObject("edge_follow").getLong("count"));
    response.put("isBusinessAccount", user.getBoolean("is_business_account"));
    response.put("photoUrl", user.getString("profile_pic_url"));
    response.put("photoUrlHD", user.getString("profile_pic_url_hd"));

    JSONObject edgeOwnerToTimelineMedia = user.getJSONObject("edge_owner_to_timeline_media");
    JSONArray posts = new JSONArray();

    try {
        loadPublicInstagramPosts(webClient, queryHash, user.getString("id"), posts, edgeOwnerToTimelineMedia, limit == null ? 12 : limit);
    } catch (Exception ex) {
        ex.printStackTrace();

        throw new RuntimeException("Você fez muitas chamadas, tente mais tarde");
    }

    response.put("posts", posts);

    return response;
}

private void loadPublicInstagramPosts(WebClient webClient, String queryHash, String userId, JSONArray posts, JSONObject edgeOwnerToTimelineMedia, Integer limit) throws IOException {
    JSONArray edges = edgeOwnerToTimelineMedia.getJSONArray("edges");

    for (Object elem : edges) {
        if (limit != null && posts.length() == limit) {
            return;
        }

        JSONObject node = ((JSONObject) elem).getJSONObject("node");

        if (node.getBoolean("is_video")) {
            continue;
        }

        JSONObject post = new JSONObject();

        post.put("id", node.getString("id"));
        post.put("shortcode", node.getString("shortcode"));

        JSONArray captionEdges = node.getJSONObject("edge_media_to_caption").getJSONArray("edges");

        if (captionEdges.length() > 0) {
            JSONObject captionNode = ((JSONObject) captionEdges.get(0)).getJSONObject("node");

            post.put("caption", captionNode.getString("text"));
        } else {
            post.put("caption", (Object) null);
        }

        post.put("photoUrl", node.getString("display_url"));

        JSONObject dimensions = node.getJSONObject("dimensions");

        post.put("photoWidth", dimensions.getLong("width"));
        post.put("photoHeight", dimensions.getLong("height"));

        JSONArray thumbnailResources = node.getJSONArray("thumbnail_resources");
        JSONArray thumbnails = new JSONArray();

        for (Object elem2 : thumbnailResources) {
            JSONObject obj = (JSONObject) elem2;
            JSONObject thumbnail = new JSONObject();

            thumbnail.put("photoUrl", obj.getString("src"));
            thumbnail.put("photoWidth", obj.getLong("config_width"));
            thumbnail.put("photoHeight", obj.getLong("config_height"));
            thumbnails.put(thumbnail);
        }

        post.put("thumbnails", thumbnails);
        posts.put(post);
    }

    JSONObject pageInfo = edgeOwnerToTimelineMedia.getJSONObject("page_info");

    if (!pageInfo.getBoolean("has_next_page")) {
        return;
    }

    String endCursor = pageInfo.getString("end_cursor");
    String variables = "{\"id\":\"" + userId + "\",\"first\":12,\"after\":\"" + endCursor + "\"}";

    String url = "https://www.instagram.com/graphql/query/?query_hash=" + queryHash + "&variables=" + URLEncoder.encode(variables, "UTF-8");
    Page page = webClient.getPage(url);
    WebResponse response = page.getWebResponse();
    String content = response.getContentAsString();
    JSONObject json = new JSONObject(content);

    loadPublicInstagramPosts(webClient, queryHash, userId, posts, json.getJSONObject("data").getJSONObject("user").getJSONObject("edge_owner_to_timeline_media"), limit);
}


এটি প্রতিক্রিয়ার একটি উদাহরণ:

{
  "id": "290482318",
  "username": "thebrainscoop",
  "fullName": "Official Fan Page",
  "followedBy": 1023,
  "following": 6,
  "isBusinessAccount": false,
  "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/447ffd0262082f373acf3d467435f130/5C709C77/t51.2885-19/11351770_612904665516559_678168252_a.jpg",
  "photoUrlHD": "https://scontent-gru2-1.cdninstagram.com/vp/447ffd0262082f373acf3d467435f130/5C709C77/t51.2885-19/11351770_612904665516559_678168252_a.jpg",
  "posts": [
    {
      "id": "1430331382090378714",
      "shortcode": "BPZjtBUly3a",
      "caption": "If I have any active followers anymore; hello! I'm Brianna, and I created this account when I was just 12 years old to show my love for The Brain Scoop. I'm now nearly finished high school, and just rediscovered it. I just wanted to see if anyone is still active on here, and also correct some of my past mistakes - being a child at the time, I didn't realise I had to credit artists for their work, so I'm going to try to correct that post haste. Also; the font in my bio is horrendous. Why'd I think that was a good idea? Anyway, this is a beautiful artwork of the long-tailed pangolin by @chelsealinaeve . Check her out!",
      "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/ab823331376ca46136457f4654bf2880/5CAD48E4/t51.2885-15/e35/16110915_400942200241213_3503127351280009216_n.jpg",
      "photoWidth": 640,
      "photoHeight": 457,
      "thumbnails": [
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/43b195566d0ef2ad5f4663ff76d62d23/5C76D756/t51.2885-15/e35/c91.0.457.457/s150x150/16110915_400942200241213_3503127351280009216_n.jpg",
          "photoWidth": 150,
          "photoHeight": 150
        },
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/ae39043a7ac050c56d741d8b4355c185/5C93971C/t51.2885-15/e35/c91.0.457.457/s240x240/16110915_400942200241213_3503127351280009216_n.jpg",
          "photoWidth": 240,
          "photoHeight": 240
        },
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/ae7a22d09e3ef98d0a6bbf31d621a3b7/5CACBBA6/t51.2885-15/e35/c91.0.457.457/s320x320/16110915_400942200241213_3503127351280009216_n.jpg",
          "photoWidth": 320,
          "photoHeight": 320
        },
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/1439dc72b70e7c0c0a3afcc30970bb13/5C8E2923/t51.2885-15/e35/c91.0.457.457/16110915_400942200241213_3503127351280009216_n.jpg",
          "photoWidth": 480,
          "photoHeight": 480
        },
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/1439dc72b70e7c0c0a3afcc30970bb13/5C8E2923/t51.2885-15/e35/c91.0.457.457/16110915_400942200241213_3503127351280009216_n.jpg",
          "photoWidth": 640,
          "photoHeight": 640
        }
      ]
    },
    {
      "id": "442527661838057235",
      "shortcode": "YkLJBXJD8T",
      "caption": null,
      "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/dc94b38da679826b9ac94ccd2bcc4928/5C7CDF93/t51.2885-15/e15/11327349_860747310663863_2105199307_n.jpg",
      "photoWidth": 612,
      "photoHeight": 612,
      "thumbnails": [
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/c1153c6513c44a6463d897e14b2d8f06/5CB13ADD/t51.2885-15/e15/s150x150/11327349_860747310663863_2105199307_n.jpg",
          "photoWidth": 150,
          "photoHeight": 150
        },
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/47e60ec8bca5a1382cd9ac562439d48c/5CAE6A82/t51.2885-15/e15/s240x240/11327349_860747310663863_2105199307_n.jpg",
          "photoWidth": 240,
          "photoHeight": 240
        },
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/da0ee5b666ab40e4adc1119e2edca014/5CADCB59/t51.2885-15/e15/s320x320/11327349_860747310663863_2105199307_n.jpg",
          "photoWidth": 320,
          "photoHeight": 320
        },
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/02ee23571322ea8d0992e81e72f80ef2/5C741048/t51.2885-15/e15/s480x480/11327349_860747310663863_2105199307_n.jpg",
          "photoWidth": 480,
          "photoHeight": 480
        },
        {
          "photoUrl": "https://scontent-gru2-1.cdninstagram.com/vp/dc94b38da679826b9ac94ccd2bcc4928/5C7CDF93/t51.2885-15/e15/11327349_860747310663863_2105199307_n.jpg",
          "photoWidth": 640,
          "photoHeight": 640
        }
      ]
    }
  ]
}

আমি কি ইউজারিড (পিকে) দ্বারা ডেটা পেতে পারি
সৌরভ রঠোড

দুঃখিত @ সৌরভ্রথোদ আমি চেষ্টা করেছি কিন্তু এটি করার কোনও উপায় আমি পাইনি। কেউ যদি এর সমাধান করে তবে আমি খুব সন্তুষ্ট হব। মন্তব্যের জন্য ধন্যবাদ.
রুয়ান ব্যারোসো

2

আমার এই ফাংশনটি সত্যই প্রয়োজন তবে ওয়ার্ডপ্রেসের জন্য। আমি ফিট এবং এটি পুরোপুরি কাজ করে

<script>
    jQuery(function($){
        var name = "caririceara.comcariri";
        $.get("https://images"+~~(Math.random()*33)+"-focus-opensocial.googleusercontent.com/gadgets/proxy?container=none&url=https://www.instagram.com/" + name + "/", function(html) {
            if (html) {
                var regex = /_sharedData = ({.*);<\/script>/m,
                  json = JSON.parse(regex.exec(html)[1]),
                  edges = json.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges;
              $.each(edges, function(n, edge) {
                   if (n <= 7){
                     var node = edge.node;
                    $('.img_ins').append('<a href="https://instagr.am/p/'+node.shortcode+'" target="_blank"><img src="'+node.thumbnail_src+'" width="150"></a>');
                   }
              });
            }
        });
    }); 
    </script>

1

নীচের নোডেজ কোডগুলি একটি ইনস্টাগ্রাম পৃষ্ঠা থেকে জনপ্রিয় চিত্রগুলি স্ক্র্যাপ করে। 'স্ক্র্যাপআইন্সট্রাগ্রামপেজ' ফাংশনটি বার্ধক্যজনিত প্রভাবের যত্ন নেয়।

var request = require('parse5');
var request = require('request');
var rp      = require('request-promise');
var $       = require('cheerio'); // Basically jQuery for node.js 
const jsdom = require("jsdom");    
const { JSDOM } = jsdom;


function ScrapeInstagramPage (args) {
    dout("ScrapeInstagramPage for username -> " + args.username);
    var query_url = 'https://www.instagram.com/' + args.username + '/';

    var cookieString = '';

    var options = {
        url: query_url,
        method: 'GET',
        headers: {
            'x-requested-with' : 'XMLHttpRequest',
            'accept-language'  : 'en-US,en;q=0.8,pt;q=0.6,hi;q=0.4', 
            'User-Agent'       : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
            'referer'          : 'https://www.instagram.com/dress_blouse_designer/',
            'Cookie'           : cookieString,
            'Accept'           : '*/*',
            'Connection'       : 'keep-alive',
            'authority'        : 'www.instagram.com' 
        }
    };


    function dout (msg) {
        if (args.debug) {
            console.log(msg);
        }
    }

    function autoParse(body, response, resolveWithFullResponse) {
        // FIXME: The content type string could contain additional values like the charset. 
        // Consider using the `content-type` library for a robust comparison. 
        if (response.headers['content-type'] === 'application/json') {
            return JSON.parse(body);
        } else if (response.headers['content-type'] === 'text/html') {
            return $.load(body);
        } else {
            return body;
        }
    }

    options.transform = autoParse;


    rp(options)
        .then(function (autoParsedBody) {
            if (args.debug) {
                console.log("Responce of 'Get first user page': ");
                console.log(autoParsedBody);
                console.log("Creating JSDOM from above Responce...");
            }

            const dom = new JSDOM(autoParsedBody.html(), { runScripts: "dangerously" });
            if (args.debug) console.log(dom.window._sharedData); // full data doc form instagram for a page

            var user = dom.window._sharedData.entry_data.ProfilePage[0].user;
            if (args.debug) {
                console.log(user); // page user
                console.log(user.id); // user ID
                console.log(user.full_name); // user full_name
                console.log(user.username); // user username
                console.log(user.followed_by.count); // user followed_by
                console.log(user.profile_pic_url_hd); // user profile pic
                console.log(autoParsedBody.html());
            }

            if (user.is_private) {
                dout ("User account is PRIVATE");
            } else {
                dout ("User account is public");
                GetPostsFromUser(user.id, 5000, undefined);
            }
        })
        .catch(function (err) {
            console.log( "ERROR: " + err );
        });  

    var pop_posts = [];
    function GetPostsFromUser (user_id, first, end_cursor) {
        var end_cursor_str = "";
        if (end_cursor != undefined) {
            end_cursor_str = '&after=' + end_cursor;
        }

        options.url = 'https://www.instagram.com/graphql/query/?query_id=17880160963012870&id=' 
                        + user_id + '&first=' + first + end_cursor_str;

        rp(options)
            .then(function (autoParsedBody) {
                if (autoParsedBody.status === "ok") {
                    if (args.debug) console.log(autoParsedBody.data);
                    var posts = autoParsedBody.data.user.edge_owner_to_timeline_media;

                    // POSTS processing
                    if (posts.edges.length > 0) {
                        //console.log(posts.edges);
                        pop_posts = pop_posts.concat
                        (posts.edges.map(function(e) {
                            var d = new Date();
                            var now_seconds = d.getTime() / 1000;

                            var seconds_since_post = now_seconds - e.node.taken_at_timestamp;
                            //console.log("seconds_since_post: " + seconds_since_post);

                            var ageing = 10; // valuses (1-10]; big value means no ageing
                            var days_since_post = Math.floor(seconds_since_post/(24*60*60));
                            var df = (Math.log(ageing+days_since_post) / (Math.log(ageing)));
                            var likes_per_day = (e.node.edge_liked_by.count / df);
                            // console.log("likes: " + e.node.edge_liked_by.count);
                            //console.log("df: " + df);
                            //console.log("likes_per_day: " + likes_per_day);
                            //return (likes_per_day > 10 * 1000);
                            var obj = {};
                            obj.url = e.node.display_url;
                            obj.likes_per_day = likes_per_day;
                            obj.days_since_post = days_since_post;
                            obj.total_likes = e.node.edge_liked_by.count;
                            return obj;
                        }
                        ));

                        pop_posts.sort(function (b,a) {
                          if (a.likes_per_day < b.likes_per_day)
                            return -1;
                          if (a.likes_per_day > b.likes_per_day)
                            return 1;
                          return 0;
                        });

                        //console.log(pop_posts);

                        pop_posts.forEach(function (obj) {
                            console.log(obj.url);
                        });
                    }

                    if (posts.page_info.has_next_page) {
                        GetPostsFromUser(user_id, first, posts.page_info.end_cursor);
                    }
                } else {
                    console.log( "ERROR: Posts AJAX call not returned good..." );
                }
            })
            .catch(function (err) {
                console.log( "ERROR: " + err );
            }); 
    }
}


ScrapeInstagramPage ({username : "dress_blouse_designer", debug : false});

এখানে চেষ্টা করুন

উদাহরণ: প্রদত্ত URL এর জন্য ' https://www.instagram.com/dress_blouse_designer/ ' কেউ ফাংশন কল করতে পারে

ScrapeInstagramPage ({username : "dress_blouse_designer", debug : false});

আমি কেবল প্রথম 12 টি পোস্ট দেখতে পাচ্ছি, আমি কীভাবে এই সবগুলি পেতে পারি?
রাহুল গাওয়ালে

0

এটি একটি সাধারণ এজ্যাক্স কল এবং পুনরাবৃত্ত চিত্রের পাথ ব্যবহার করে কাজ করে।

        var name = "nasa";
        $.get("https://www.instagram.com/" + name + "/?__a=1", function (data, status) {
            console.log('IG_NODES', data.user.media.nodes);
            $.each(data.user.media.nodes, function (n, item) {
                console.log('ITEMS', item.display_src);
                $('body').append(
                    "<div class='col-md-4'><img class='img-fluid d-block' src='" + item.display_src + "'></div>"
                );
            });
        })

এটি আমার পক্ষে কাজ করেছিল, তবে আমি যখন ইনস্টাগ্রামে লগ ইন করি।
zundi

-1

এখানে একটি পিএইচপি স্ক্রিপ্ট রয়েছে যা চিত্রগুলি ডাউনলোড করে এবং চিত্রগুলির লিঙ্কগুলির সাথে একটি এইচটিএমএল ফাইল তৈরি করে। পিএইচপি সংস্করণের জন্য ক্রেডিট 350 ডি, এটি কেবল বিশদভাবে বলা আছে..আমি এটি ক্রোন কাজ এবং ফায়ারিংয়ের পরামর্শ দিই তবে আপনার প্রায়শই প্রয়োজন হয়। মে 2019 হিসাবে যাচাই করা হয়েছে

<?
$user = 'smena8m';
$igdata = file_get_contents('https://instagram.com/'.$user.'/');
preg_match('/_sharedData = ({.*);<\/script>/',$igdata,$matches);
$profile_data = json_decode($matches[1])->entry_data->ProfilePage[0]->graphql->user;
$html = '<div class="instagramBox" style="display:inline-grid;grid-template-columns:auto auto auto;">';
$i = 0;
$max = 9;
while($i<$max){
    $imglink = $profile_data->edge_owner_to_timeline_media->edges[$i]->node->shortcode;
    $img = $profile_data->edge_owner_to_timeline_media->edges[$i]->node->thumbnail_resources[0]->src;
    file_put_contents('ig'.$i.'.jpg',file_get_contents($img));
    $html .= '<a href="https://www.instagram.com/p/'.$imglink.'/" target="_blank"><img src="ig'.$i.'.jpg" /></a>';
    $i++;
}
$html .= '</div>';
$instagram = fopen('instagram.html','w');
fwrite($instagram,$html);
fclose($instagram);
?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.